main.nim 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import nodesnim
  2. import strutils
  3. Window("Calc")
  4. var
  5. main_obj: SceneObj
  6. main = Scene("Main", main_obj)
  7. first: string = ""
  8. second: string = ""
  9. sign: string = ""
  10. vbox_obj: VBoxObj
  11. vbox = VBox(vbox_obj)
  12. result_obj: LabelObj
  13. result = Label("Result", result_obj)
  14. buttons_obj: GridBoxObj
  15. buttons = GridBox("Buttons", buttons_obj)
  16. button_7_obj: ButtonObj
  17. button_8_obj: ButtonObj
  18. button_9_obj: ButtonObj
  19. button_4_obj: ButtonObj
  20. button_5_obj: ButtonObj
  21. button_6_obj: ButtonObj
  22. button_1_obj: ButtonObj
  23. button_2_obj: ButtonObj
  24. button_3_obj: ButtonObj
  25. button_0_obj: ButtonObj
  26. button_00_obj: ButtonObj
  27. button_add_obj: ButtonObj
  28. button_sub_obj: ButtonObj
  29. button_mul_obj: ButtonObj
  30. button_div_obj: ButtonObj
  31. button_eq_obj: ButtonObj
  32. button_7 = Button("Button 7", button_7_obj)
  33. button_8 = Button("Button 8", button_8_obj)
  34. button_9 = Button("Button 9", button_9_obj)
  35. button_4 = Button("Button 4", button_4_obj)
  36. button_5 = Button("Button 5", button_5_obj)
  37. button_6 = Button("Button 6", button_6_obj)
  38. button_1 = Button("Button 1", button_1_obj)
  39. button_2 = Button("Button 2", button_2_obj)
  40. button_3 = Button("Button 3", button_3_obj)
  41. button_0 = Button("Button 0", button_0_obj)
  42. button_00 = Button("Button 00", button_00_obj)
  43. button_add = Button("Button +", button_add_obj)
  44. button_sub = Button("Button -", button_sub_obj)
  45. button_mul = Button("Button *", button_mul_obj)
  46. button_div = Button("Button /", button_div_obj)
  47. button_eq = Button("Button =", button_eq_obj)
  48. main.addChild(vbox)
  49. vbox.addChild(result)
  50. vbox.addChild(buttons)
  51. vbox.setChildAnchor(0.5, 0.5, 0.5, 0.5)
  52. vbox.setSizeAnchor(1, 1)
  53. buttons.setRow(4)
  54. buttons.addChilds(
  55. button_7, button_8, button_9, button_add,
  56. button_4, button_5, button_6, button_sub,
  57. button_1, button_2, button_3, button_mul,
  58. button_0, button_00, button_div, button_eq)
  59. proc number(self: ButtonPtr, x, y: float) =
  60. if sign == "":
  61. first &= self.text
  62. else:
  63. second &= self.text
  64. proc on_sign(self: ButtonPtr, x, y: float) =
  65. if first != "":
  66. sign = self.text
  67. button_7.text = "7"
  68. button_8.text = "8"
  69. button_9.text = "9"
  70. button_add.text = "+"
  71. button_4.text = "4"
  72. button_5.text = "5"
  73. button_6.text = "6"
  74. button_sub.text = "-"
  75. button_1.text = "1"
  76. button_2.text = "2"
  77. button_3.text = "3"
  78. button_mul.text = "*"
  79. button_div.text = "/"
  80. button_1.on_touch = number
  81. button_2.on_touch = number
  82. button_3.on_touch = number
  83. button_4.on_touch = number
  84. button_5.on_touch = number
  85. button_6.on_touch = number
  86. button_7.on_touch = number
  87. button_8.on_touch = number
  88. button_9.on_touch = number
  89. button_add.on_touch = on_sign
  90. button_sub.on_touch = on_sign
  91. button_mul.on_touch = on_sign
  92. button_div.on_touch = on_sign
  93. button_0.text = "0"
  94. button_0.on_touch =
  95. proc(self: ButtonPtr, x, y: float) =
  96. if sign == "" and first != "":
  97. first &= "0"
  98. elif sign != "/":
  99. second &= "0"
  100. button_00.text = "00"
  101. button_00.on_touch =
  102. proc(self: ButtonPtr, x, y: float) =
  103. if sign == "" and first != "":
  104. first &= "00"
  105. elif second != "":
  106. second &= "00"
  107. button_eq.text = "="
  108. button_eq.on_touch =
  109. proc(self: ButtonPtr, x, y: float) =
  110. first =
  111. if sign == "+":
  112. $(parseFloat(first) + parseFloat(second))
  113. elif sign == "-":
  114. $(parseFloat(first) - parseFloat(second))
  115. elif sign == "*":
  116. $(parseFloat(first) * parseFloat(second))
  117. elif sign == "/":
  118. $(parseFloat(first) / parseFloat(second))
  119. else:
  120. first
  121. if sign != "":
  122. second = ""
  123. sign = ""
  124. result.setTextAlign(1, 0, 1, 0)
  125. result.resize(160, 32)
  126. result.on_process =
  127. proc(self: NodePtr) =
  128. if sign == "":
  129. result.text = first
  130. elif second == "":
  131. result.text = first & " " & sign
  132. else:
  133. result.text = first & " " & sign & " " & second
  134. addScene(main)
  135. setMainScene("Main")
  136. windowLaunch()