isac-java/src/java/isac/gui/mawen/editor/CalcUtil.scala
changeset 5209 515070991639
parent 5205 db502ee98055
parent 5207 958762fb43ff
child 5214 733780043a0a
equal deleted inserted replaced
5206:766b810ae181 5209:515070991639
    58     case "binOp" => calcDefaultBinOp( emptyBox, f)
    58     case "binOp" => calcDefaultBinOp( emptyBox, f)
    59     case "Pow"   => calcPow( emptyBox, f)
    59     case "Pow"   => calcPow( emptyBox, f)
    60     case "Frac"  => calcFrac( emptyBox, f)
    60     case "Frac"  => calcFrac( emptyBox, f)
    61     case _       => calcDefault( operatorString, List(emptyBox.paramr, emptyBox.paraml), emptyBox.x0, emptyBox.y0, emptyBox.level, emptyBox.ast, f)
    61     case _       => calcDefault( operatorString, List(emptyBox.paramr, emptyBox.paraml), emptyBox.x0, emptyBox.y0, emptyBox.level, emptyBox.ast, f)
    62   }
    62   }
       
    63   // TODOWN rename f
    63   def calcVariable( emptybox: EmptyLeafOpBox, f:(DrawBox) => Unit) = {
    64   def calcVariable( emptybox: EmptyLeafOpBox, f:(DrawBox) => Unit) = {
    64     val level = emptybox.level
    65     val level = emptybox.level
    65     val x0 = emptybox.x0
    66     val x0 = emptybox.x0
    66     val y0 = emptybox.y0
    67     val y0 = emptybox.y0
    67     val ast =  emptybox.ast
    68     val ast =  emptybox.ast
    69     val box : Rectangle =  Settings.getStringBoundOf(str, level, x0, y0) //  getStringBounds(g.asInstanceOf[Graphics2D], str, x0, y0) // TODO: Why does this work without x0,y0?
    70     val box : Rectangle =  Settings.getStringBoundOf(str, level, x0, y0) //  getStringBounds(g.asInstanceOf[Graphics2D], str, x0, y0) // TODO: Why does this work without x0,y0?
    70     val b = DrawBox(str, level, box.x, box.y + box.height, box.width, box.height, x0, y0, ast)
    71     val b = DrawBox(str, level, box.x, box.y + box.height, box.width, box.height, x0, y0, ast)
    71     f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56
    72     f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56
    72     b
    73     b
    73   }
    74   }
       
    75   // TODOWN rename f
    74   def calcConstant( emptyBox: EmptyLeafOpBox, f:(DrawBox) => Unit) = {
    76   def calcConstant( emptyBox: EmptyLeafOpBox, f:(DrawBox) => Unit) = {
    75     val level = emptyBox.level
    77     val level = emptyBox.level
    76     val x0 = emptyBox.x0
    78     val x0 = emptyBox.x0
    77     val y0 = emptyBox.y0
    79     val y0 = emptyBox.y0
    78     val ast =  emptyBox.ast
    80     val ast =  emptyBox.ast
    82     val newY = ((box.y - y0) * -1) - box.height /2 + midline
    84     val newY = ((box.y - y0) * -1) - box.height /2 + midline
    83     val b = DrawBox(op, level, box.x, y0, box.width, fontWidthOf(fontsizeOf(level)),x0, newY, ast)
    85     val b = DrawBox(op, level, box.x, y0, box.width, fontWidthOf(fontsizeOf(level)),x0, newY, ast)
    84     f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56
    86     f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56
    85     b
    87     b
    86   }
    88   }
       
    89   // TODOWN rename f
    87   def calcGAP( emptyBox: EmptyLeafOpBox, f:(DrawBox) => Unit) = {
    90   def calcGAP( emptyBox: EmptyLeafOpBox, f:(DrawBox) => Unit) = {
    88     val level = emptyBox.level
    91     val level = emptyBox.level
    89     val x0 = emptyBox.x0
    92     val x0 = emptyBox.x0
    90     val y0 = emptyBox.y0
    93     val y0 = emptyBox.y0
    91     val ast =  emptyBox.ast
    94     val ast =  emptyBox.ast
    92     val box : Rectangle = Settings.getStringBoundOf("xx", level, x0, y0) //getStringBounds(g.asInstanceOf[Graphics2D], "xx", x0, y0)
    95     val box : Rectangle = Settings.getStringBoundOf("xx", level, x0, y0) //getStringBounds(g.asInstanceOf[Graphics2D], "xx", x0, y0)
    93     val b = new DrawBox("GAP", level, box.x, y0, box.width, fontWidthOf(fontsizeOf(level)),x0, y0, ast)
    96     val b = new DrawBox("GAP", level, box.x, y0, box.width, fontWidthOf(fontsizeOf(level)),x0, y0, ast)
    94     f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56
    97     f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56
    95     b
    98     b
    96   }
    99   }
       
   100   // TODOWN why no f ?
    97   def CalcBox( str: String, emptyBox: EmptyUniOpBox, f:(DrawBox) => Unit) = {
   101   def CalcBox( str: String, emptyBox: EmptyUniOpBox, f:(DrawBox) => Unit) = {
    98      val box = assembleBoxesRec( new EmptyBox(emptyBox.level, emptyBox.x0, emptyBox.y0, emptyBox.param), f)
   102      val box = assembleBoxesRec( new EmptyBox(emptyBox.level, emptyBox.x0, emptyBox.y0, emptyBox.param), f)
    99      box.isBoxed = true
   103      box.isBoxed = true
   100      if (str.split('.').head == "MAIN") {
   104      if (str.split('.').head == "MAIN") {
   101        box.boxedElement = str.split('.').tail.head.toInt
   105        box.boxedElement = str.split('.').tail.head.toInt
   104        box.boxedElement = 0
   108        box.boxedElement = 0
   105        box.colorCode = str.split('.').head.toInt
   109        box.colorCode = str.split('.').head.toInt
   106      }
   110      }
   107      box
   111      box
   108   }
   112   }
       
   113   // TODOWN rename f
   109   def calcCursor( emptyBox: EmptyUniOpBox, f:(DrawBox) => Unit) = {
   114   def calcCursor( emptyBox: EmptyUniOpBox, f:(DrawBox) => Unit) = {
   110     val x0 = emptyBox.x0
   115     val x0 = emptyBox.x0
   111     val y0 = emptyBox.y0
   116     val y0 = emptyBox.y0
   112     val level = emptyBox.level
   117     val level = emptyBox.level
   113     val ast = emptyBox.ast
   118     val ast = emptyBox.ast
   119     b
   124     b
   120   }
   125   }
   121   /*
   126   /*
   122    * layout of horizontal type +, (binary)-, *, =
   127    * layout of horizontal type +, (binary)-, *, =
   123    */
   128    */
       
   129   // TODOWN rename f
   124   def calcDefaultBinOp( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = {
   130   def calcDefaultBinOp( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = {
   125     val operator = emptyBox.operator
   131     val operator = emptyBox.operator
   126     val paraml = emptyBox.paraml
   132     val paraml = emptyBox.paraml
   127     val paramr = emptyBox.paramr
   133     val paramr = emptyBox.paramr
   128     val x0 = emptyBox.x0
   134     val x0 = emptyBox.x0
   192     b
   198     b
   193   }
   199   }
   194   /*
   200   /*
   195    * layout of vertical type ^
   201    * layout of vertical type ^
   196    */
   202    */
       
   203   // TODOWN rename f
   197   def calcPow( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = {
   204   def calcPow( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = {
   198     val operator = emptyBox.operator
   205     val operator = emptyBox.operator
   199     val paraml = emptyBox.paraml
   206     val paraml = emptyBox.paraml
   200     val paramr = emptyBox.paramr
   207     val paramr = emptyBox.paramr
   201     val x0 = emptyBox.x0
   208     val x0 = emptyBox.x0
   218   }
   225   }
   219   
   226   
   220   /*
   227   /*
   221    * layout of vertical type with horizontal fraction bar
   228    * layout of vertical type with horizontal fraction bar
   222    */
   229    */
       
   230   // TODOWN rename f
   223   def calcFrac( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = {
   231   def calcFrac( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = {
   224     val operator = emptyBox.operator
   232     val operator = emptyBox.operator
   225     val paramUpper = emptyBox.paraml
   233     val paramUpper = emptyBox.paraml
   226     val paramLower = emptyBox.paramr
   234     val paramLower = emptyBox.paramr
   227     var x0 = emptyBox.x0
   235     var x0 = emptyBox.x0
   260         x0, y0, ast)
   268         x0, y0, ast)
   261     b.children = line_box :: u_res_box :: l_res_box :: List.empty[DrawBox]
   269     b.children = line_box :: u_res_box :: l_res_box :: List.empty[DrawBox]
   262     f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56
   270     f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56
   263     b
   271     b
   264   }
   272   }
       
   273   // TODOWN rename f
   265   def calcDefault( str: String, param: List[Ast], x0: Int, y0: Int, level: Int, ast : Ast, f:(DrawBox) => Unit) = {
   274   def calcDefault( str: String, param: List[Ast], x0: Int, y0: Int, level: Int, ast : Ast, f:(DrawBox) => Unit) = {
   266     val boxes = param.map(x => assembleBoxesRec( new EmptyBox(level, x0, y0, x),emptyFunc))
   275     val boxes = param.map(x => assembleBoxesRec( new EmptyBox(level, x0, y0, x),emptyFunc))
   267     
   276     
   268     val horizontalSpace =             Settings.getStringBoundOf(",x", level, x0, y0)
   277     val horizontalSpace =             Settings.getStringBoundOf(",x", level, x0, y0)
   269     val horizontalCloseBracketSpace = Settings.getStringBoundOf("i)", level, x0, y0)
   278     val horizontalCloseBracketSpace = Settings.getStringBoundOf("i)", level, x0, y0)
   293   
   302   
   294   /* TODOWN: generalise together with calcPlus to calcHorizontal
   303   /* TODOWN: generalise together with calcPlus to calcHorizontal
   295    * calculate Boxes with the form Appl(Constant("HOL.eq"), Variable(str), Variable(str)) --> str = str
   304    * calculate Boxes with the form Appl(Constant("HOL.eq"), Variable(str), Variable(str)) --> str = str
   296    * nearly similar to calcPlus() but with more Space between Variable and Constant (LARGESPACE instance of MEDIUMSPACE)
   305    * nearly similar to calcPlus() but with more Space between Variable and Constant (LARGESPACE instance of MEDIUMSPACE)
   297    */
   306    */
       
   307   // TODOWN unify with calcDefaultBinOp , rename f
   298   def calcEqualation( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = {
   308   def calcEqualation( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = {
   299     val operator = emptyBox.operator
   309     val operator = emptyBox.operator
   300     val paraml = emptyBox.paraml
   310     val paraml = emptyBox.paraml
   301     val paramr = emptyBox.paramr
   311     val paramr = emptyBox.paramr
   302     val x0 = emptyBox.x0
   312     val x0 = emptyBox.x0