calculator.gd 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. extends GraphNode
  2. var calculated = false
  3. var expression = ""
  4. var lastresult = 0.0
  5. signal open_help
  6. func _ready() -> void:
  7. #add button to title bar
  8. var titlebar = self.get_titlebar_hbox()
  9. var btn = Button.new()
  10. btn.text = "?"
  11. btn.tooltip_text = "Open help for " + self.title
  12. btn.connect("pressed", Callable(self, "_open_help")) #pass key (process name) when button is pressed
  13. titlebar.add_child(btn)
  14. #this links the buttons, it is stupid but for some reason doing this automatically just would not work reliably
  15. $HBoxContainer/Button.pressed.connect(calculate.bind($HBoxContainer/Button))
  16. $HBoxContainer/Button2.pressed.connect(calculate.bind($HBoxContainer/Button2))
  17. $HBoxContainer/Button3.pressed.connect(calculate.bind($HBoxContainer/Button3))
  18. $HBoxContainer/Button4.pressed.connect(calculate.bind($HBoxContainer/Button4))
  19. $HBoxContainer5/Button.pressed.connect(calculate.bind($HBoxContainer5/Button))
  20. $HBoxContainer5/Button2.pressed.connect(calculate.bind($HBoxContainer5/Button2))
  21. $HBoxContainer5/Button3.pressed.connect(calculate.bind($HBoxContainer5/Button3))
  22. $HBoxContainer5/Button4.pressed.connect(calculate.bind($HBoxContainer5/Button4))
  23. $HBoxContainer2/Button.pressed.connect(calculate.bind($HBoxContainer2/Button))
  24. $HBoxContainer2/Button2.pressed.connect(calculate.bind($HBoxContainer2/Button2))
  25. $HBoxContainer2/Button3.pressed.connect(calculate.bind($HBoxContainer2/Button3))
  26. $HBoxContainer2/Button4.pressed.connect(calculate.bind($HBoxContainer2/Button4))
  27. $HBoxContainer3/Button.pressed.connect(calculate.bind($HBoxContainer3/Button))
  28. $HBoxContainer3/Button2.pressed.connect(calculate.bind($HBoxContainer3/Button2))
  29. $HBoxContainer3/Button3.pressed.connect(calculate.bind($HBoxContainer3/Button3))
  30. $HBoxContainer3/Button4.pressed.connect(calculate.bind($HBoxContainer3/Button4))
  31. $HBoxContainer4/Button.pressed.connect(calculate.bind($HBoxContainer4/Button))
  32. $HBoxContainer4/Button2.pressed.connect(calculate.bind($HBoxContainer4/Button2))
  33. $HBoxContainer4/Button3.pressed.connect(calculate.bind($HBoxContainer4/Button3))
  34. $HBoxContainer4/Button4.pressed.connect(calculate.bind($HBoxContainer4/Button4))
  35. func _open_help():
  36. open_help.emit(self.get_meta("command"), self.title)
  37. func calculate(button: Button):
  38. var label = button.text
  39. var value = button.get_meta("calc")
  40. if calculated == true:
  41. $Screen.text = ""
  42. expression = ""
  43. calculated = false
  44. if value in ["+", "-", "*", "/"]:
  45. $Screen.text += str(lastresult)
  46. expression += str(lastresult)
  47. if value == "clear":
  48. $Screen.text = ""
  49. elif value == "del":
  50. $Screen.text = $Screen.text.substr(0, $Screen.text.length() - 1)
  51. elif value == "=":
  52. var expr = Expression.new()
  53. expr.parse(expression)
  54. lastresult = expr.execute()
  55. $Screen.text += "\n= " + str(lastresult)
  56. calculated = true
  57. else:
  58. $Screen.text += label
  59. expression += value