isac-java/src/java/isac/gui/mawen/editor/EventUtil.scala
author mmahringer <s1520454056@students.fh-hagenberg.at>
Wed, 06 Sep 2017 13:15:47 +0200
changeset 5198 00b2583bba9e
parent 5189 40a3d69df537
child 5200 80152e6a6702
permissions -rw-r--r--
fire NotifyBraille on changeing the Box and Editing values
     1 package isac.gui.mawen.editor
     2 
     3 import java.awt.Graphics
     4 import java.awt.Point
     5 import java.util.ArrayList
     6 import java.awt.event.KeyListener
     7 import java.awt.event.KeyEvent
     8 import isac.gui.mawen.syntax.Ast
     9 import java.awt.event.MouseWheelListener
    10 import java.awt.event.MouseWheelEvent
    11 import java.awt.event.MouseMotionListener
    12 import java.awt.event.MouseEvent
    13 import isac.gui.mawen.editor.Box._
    14 import javafx.scene.input.KeyCode
    15 import java.awt.Toolkit
    16 import isac.gui.mawen.syntax.Ast.Variable
    17 import java.awt.datatransfer.DataFlavor
    18 import isac.gui.mawen.syntax.Ast._
    19 import java.awt.datatransfer.StringSelection
    20 
    21 /**
    22  * Event handler for <code>AstComponent</code>
    23  */
    24 object EventUtil {
    25   
    26   var foreachBoxFunction : (Graphics, DrawBox) => Unit = null
    27   
    28   
    29   
    30   
    31   def drawBoxAt(p: Point) = {
    32     foreachBoxFunction = EventUtil.doInBox(p, (g, box) => {
    33         Box.draw(box, g, false)
    34       }
    35     )
    36   }
    37   
    38 
    39   
    40   
    41   /*
    42    * return-value is stored in <code>foreachBoxFunction</code>
    43    */
    44   def doInBox(mousePos: Point, f: (Graphics, DrawBox) => Unit) : 
    45       (Graphics, DrawBox) => Unit = {
    46 	  (g: Graphics, box: DrawBox) => {
    47 	    val xfrom = box.x * Settings.zoom + Settings.translateX
    48   	  val xto   = box.x * Settings.zoom + Settings.translateX 
    49   	    + box.width  * Settings.zoom
    50   	  val yfrom = box.y * Settings.zoom + Settings.translateY 
    51         - box.height * Settings.zoom
    52   	  val yto   = box.y * Settings.zoom + Settings.translateY
    53   	  if (xfrom < mousePos.x && xto > mousePos.x && 
    54   	      yfrom < mousePos.y && yto > mousePos.y)
    55   	    f(g, box)
    56 	  }
    57 	}
    58   
    59   //TODOWN unused
    60   def CreateMouseMotionHandler(c: AstContainer) : MouseMotionListener = new MouseMotionListener() {
    61     def mouseDragged(e:MouseEvent) {
    62       
    63   	}
    64   
    65   	def mouseMoved(e: MouseEvent ) {
    66   	  
    67   	}
    68 
    69   }
    70   
    71   def CreateMouseWheelHandler(c: AstContainer) : MouseWheelListener = new MouseWheelListener() {
    72     def mouseWheelMoved(e: MouseWheelEvent): Unit = {
    73       if (Settings.isZoomAllowed) {
    74         if (e.getPreciseWheelRotation() < 0) {
    75           Settings.zoom -= 0.1f;
    76         } else {
    77           Settings.zoom += 0.1f;
    78         }
    79         if (Settings.zoom < 0.01f) {
    80           Settings.zoom = 0.01f;
    81         }
    82       }
    83       c.repaint()
    84     }
    85   }
    86   
    87   
    88   def CreateKeyEventHandler(c: AstContainer) : KeyListener = new KeyListener () {
    89     
    90     
    91     def keyPressed(event: KeyEvent): Unit = {
    92       if (event.getKeyCode == KeyEvent.VK_BACK_SPACE) { 
    93         EditingUtil.parse(c, -event.getKeyCode)
    94       }
    95       
    96       
    97     }
    98     def keyReleased(event: KeyEvent): Unit = {
    99       
   100       if (AstInfoUtil.hasBox(c.getAst())) {
   101         println("has Box")
   102          if (event.getKeyCode == KeyEvent.VK_DOWN) {
   103            TransformAstUtil.BoxChild(c)
   104          }else if (event.getKeyCode == KeyEvent.VK_RIGHT) {
   105            TransformAstUtil.BoxPrevChild(c)
   106          }else if (event.getKeyCode == KeyEvent.VK_LEFT) {
   107             TransformAstUtil.BoxNextChild(c)
   108          }else if (event.getKeyCode == KeyEvent.VK_UP) {
   109            TransformAstUtil.BoxParent(c)
   110          }
   111         EditorListenerHandler.fireNotifysBraille(c, AstInfoUtil.FindBox(c.getAst()))
   112       } else if (AstInfoUtil.hasCursor(c.getAst())) {
   113         println("has Cursor")
   114         EditingUtil.parse(c, -event.getKeyCode)
   115       }
   116      
   117       if (event.getKeyCode == KeyEvent.VK_DOWN) {
   118         TransformAstUtil.CursorChild(c)
   119       } else if (event.getKeyCode == KeyEvent.VK_RIGHT) {
   120         TransformAstUtil.CursorPrevChild(c)
   121       } else if (event.getKeyCode == KeyEvent.VK_LEFT) {
   122          TransformAstUtil.CursorNextChild(c)
   123       }else if (event.getKeyCode == KeyEvent.VK_UP) {
   124          TransformAstUtil.CursorParent(c)
   125       }else if (event.isControlDown() && event.getKeyCode == KeyEvent.VK_ENTER) {
   126         val boxAst : Ast = AstInfoUtil.FindBox(c.getAst())
   127     	  if (boxAst != null) {
   128       	  c.setAst(TransformAstUtil.Update(c.getAst(), boxAst, TransformAstUtil.UnBox))
   129     	  }
   130     	  val cursorAst : Ast = AstInfoUtil.FindCursor(c.getAst())
   131     	  if (cursorAst != null) {
   132       	  c.setAst(TransformAstUtil.Update(c.getAst(), cursorAst , TransformAstUtil.CursorToAst))
   133     	  }
   134         EditorListenerHandler.fireNotifyIsaCheck(c)
   135       }else if (event.isControlDown() && event.getKeyCode == KeyEvent.VK_V) {
   136         // !!!! Dirty Code !!!!
   137         c.setAst(Variable(Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor).asInstanceOf[String]))
   138         EditorListenerHandler.fireNotifyIsaCheck(c)
   139       }else if (event.isControlDown() && event.getKeyCode == KeyEvent.VK_C) {
   140         val astString = new StringSelection(Ast.math_string_of(c.getAst()))
   141         Toolkit.getDefaultToolkit().getSystemClipboard().setContents(astString, null)
   142         EditorListenerHandler.fireNotifyIsaCheck(c)
   143       }
   144       
   145       else if (
   146           (event.getKeyChar >= '0' && event.getKeyChar <= '9') 
   147           || (event.getKeyChar >= 'a' && event.getKeyChar <= 'z')
   148           || (event.getKeyChar >= 'A' && event.getKeyChar <= 'Z')
   149           || List('+', '-', '*', '/', '(', '=').contains(event.getKeyChar)) {
   150         EditingUtil.parse(c, event.getKeyChar.toInt)
   151         EditorListenerHandler.fireNotifysBraille(c, AstInfoUtil.FindBox(c.getAst()))
   152       } else if (
   153           event.getKeyCode == KeyEvent.VK_ENTER || 
   154           event.getKeyCode == KeyEvent.VK_DELETE || 
   155           event.getKeyCode == KeyEvent.VK_F2) {
   156         EditingUtil.parse(c, -event.getKeyCode)
   157       }
   158       
   159       if (event.getKeyCode == KeyEvent.VK_ENTER)
   160         println(c.getAst()) // Output ast on key enter
   161       
   162       
   163     }
   164     def keyTyped(event: KeyEvent): Unit = {
   165       
   166       
   167     }
   168     
   169   }
   170   
   171 
   172   
   173   
   174   
   175 }