easycoder 250807.2__tar.gz → 250809.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of easycoder might be problematic. Click here for more details.

Files changed (174) hide show
  1. {easycoder-250807.2 → easycoder-250809.1}/PKG-INFO +3 -2
  2. {easycoder-250807.2 → easycoder-250809.1}/easycoder/__init__.py +1 -1
  3. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_keyboard.py +9 -8
  4. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_program.py +1 -1
  5. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_pyside.py +65 -16
  6. easycoder-250809.1/testrc.py +7 -0
  7. {easycoder-250807.2 → easycoder-250809.1}/testui.py +1 -1
  8. easycoder-250807.2/scripts/findxr.ecs +0 -26
  9. easycoder-250807.2/testrc.py +0 -7
  10. {easycoder-250807.2 → easycoder-250809.1}/.gitignore +0 -0
  11. {easycoder-250807.2 → easycoder-250809.1}/LICENSE +0 -0
  12. {easycoder-250807.2 → easycoder-250809.1}/README.md +0 -0
  13. {easycoder-250807.2 → easycoder-250809.1}/backdrop.jpg +0 -0
  14. {easycoder-250807.2 → easycoder-250809.1}/doc/README.md +0 -0
  15. {easycoder-250807.2 → easycoder-250809.1}/doc/core/README.md +0 -0
  16. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/boolean.md +0 -0
  17. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/empty.md +0 -0
  18. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/ends.md +0 -0
  19. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/even.md +0 -0
  20. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/exists.md +0 -0
  21. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/greater.md +0 -0
  22. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/hasProperty.md +0 -0
  23. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/includes.md +0 -0
  24. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/is.md +0 -0
  25. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/less.md +0 -0
  26. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/list.md +0 -0
  27. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/none.md +0 -0
  28. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/not.md +0 -0
  29. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/numeric.md +0 -0
  30. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/object.md +0 -0
  31. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/odd.md +0 -0
  32. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/starts.md +0 -0
  33. {easycoder-250807.2 → easycoder-250809.1}/doc/core/conditions/string.md +0 -0
  34. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/add.md +0 -0
  35. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/append.md +0 -0
  36. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/assert.md +0 -0
  37. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/begin.md +0 -0
  38. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/clear.md +0 -0
  39. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/close.md +0 -0
  40. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/create.md +0 -0
  41. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/debug.md +0 -0
  42. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/decrement.md +0 -0
  43. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/delete.md +0 -0
  44. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/divide.md +0 -0
  45. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/exit.md +0 -0
  46. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/file.md +0 -0
  47. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/fork.md +0 -0
  48. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/get.md +0 -0
  49. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/go.md +0 -0
  50. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/gosub.md +0 -0
  51. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/if.md +0 -0
  52. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/import.md +0 -0
  53. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/increment.md +0 -0
  54. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/index.md +0 -0
  55. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/init.md +0 -0
  56. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/input.md +0 -0
  57. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/load.md +0 -0
  58. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/lock.md +0 -0
  59. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/log.md +0 -0
  60. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/module.md +0 -0
  61. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/multiply.md +0 -0
  62. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/negate.md +0 -0
  63. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/on.md +0 -0
  64. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/open.md +0 -0
  65. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/pop.md +0 -0
  66. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/post.md +0 -0
  67. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/print.md +0 -0
  68. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/push.md +0 -0
  69. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/put.md +0 -0
  70. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/read.md +0 -0
  71. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/release.md +0 -0
  72. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/replace.md +0 -0
  73. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/return.md +0 -0
  74. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/run.md +0 -0
  75. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/save.md +0 -0
  76. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/script.md +0 -0
  77. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/send.md +0 -0
  78. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/set.md +0 -0
  79. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/shuffle.md +0 -0
  80. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/split.md +0 -0
  81. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/stack.md +0 -0
  82. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/stop.md +0 -0
  83. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/system.md +0 -0
  84. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/take.md +0 -0
  85. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/toggle.md +0 -0
  86. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/truncate.md +0 -0
  87. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/unlock.md +0 -0
  88. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/use.md +0 -0
  89. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/variable.md +0 -0
  90. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/wait.md +0 -0
  91. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/while.md +0 -0
  92. {easycoder-250807.2 → easycoder-250809.1}/doc/core/keywords/write.md +0 -0
  93. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/arg.md +0 -0
  94. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/args.md +0 -0
  95. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/cos.md +0 -0
  96. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/datime.md +0 -0
  97. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/decode.md +0 -0
  98. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/element.md +0 -0
  99. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/elements.md +0 -0
  100. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/empty.md +0 -0
  101. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/encode.md +0 -0
  102. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/error.md +0 -0
  103. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/files.md +0 -0
  104. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/float.md +0 -0
  105. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/from.md +0 -0
  106. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/hash.md +0 -0
  107. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/index.md +0 -0
  108. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/integer.md +0 -0
  109. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/json.md +0 -0
  110. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/keys.md +0 -0
  111. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/left.md +0 -0
  112. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/length.md +0 -0
  113. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/lowercase.md +0 -0
  114. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/memory.md +0 -0
  115. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/modification.md +0 -0
  116. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/modulo.md +0 -0
  117. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/newline.md +0 -0
  118. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/now.md +0 -0
  119. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/position.md +0 -0
  120. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/property.md +0 -0
  121. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/random.md +0 -0
  122. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/right.md +0 -0
  123. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/sin.md +0 -0
  124. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/stringify.md +0 -0
  125. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/tab.md +0 -0
  126. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/tan.md +0 -0
  127. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/timestamp.md +0 -0
  128. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/today.md +0 -0
  129. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/trim.md +0 -0
  130. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/type.md +0 -0
  131. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/uppercase.md +0 -0
  132. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/value.md +0 -0
  133. {easycoder-250807.2 → easycoder-250809.1}/doc/core/values/weekday.md +0 -0
  134. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/README.md +0 -0
  135. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/attach.md +0 -0
  136. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/close.md +0 -0
  137. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/create.md +0 -0
  138. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/ellipse.md +0 -0
  139. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/image.md +0 -0
  140. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/move.md +0 -0
  141. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/on.md +0 -0
  142. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/rectangle.md +0 -0
  143. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/render.md +0 -0
  144. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/run.md +0 -0
  145. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/set.md +0 -0
  146. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/keywords/text.md +0 -0
  147. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/values/attribute.md +0 -0
  148. {easycoder-250807.2 → easycoder-250809.1}/doc/graphics/values/window.md +0 -0
  149. {easycoder-250807.2 → easycoder-250809.1}/easycoder/close.png +0 -0
  150. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_classes.py +0 -0
  151. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_compiler.py +0 -0
  152. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_condition.py +0 -0
  153. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_core.py +0 -0
  154. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_handler.py +0 -0
  155. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_timestamp.py +0 -0
  156. {easycoder-250807.2 → easycoder-250809.1}/easycoder/ec_value.py +0 -0
  157. {easycoder-250807.2 → easycoder-250809.1}/images/Semoigo Dawn.jpg +0 -0
  158. {easycoder-250807.2 → easycoder-250809.1}/json/graphics-demo.json +0 -0
  159. {easycoder-250807.2 → easycoder-250809.1}/plugins/ec_keyboard.py +0 -0
  160. {easycoder-250807.2 → easycoder-250809.1}/plugins/ec_p100.py +0 -0
  161. {easycoder-250807.2 → easycoder-250809.1}/plugins/ec_pyside6.py +0 -0
  162. {easycoder-250807.2 → easycoder-250809.1}/plugins/points.py +0 -0
  163. {easycoder-250807.2 → easycoder-250809.1}/plugins/sql.py +0 -0
  164. {easycoder-250807.2 → easycoder-250809.1}/pyproject.toml +0 -0
  165. {easycoder-250807.2 → easycoder-250809.1}/scripts/benchmark.ecs +0 -0
  166. {easycoder-250807.2 → easycoder-250809.1}/scripts/config.ecg +0 -0
  167. {easycoder-250807.2 → easycoder-250809.1}/scripts/ec_keyboard.py +0 -0
  168. {easycoder-250807.2 → easycoder-250809.1}/scripts/fizzbuzz.ecs +0 -0
  169. {easycoder-250807.2 → easycoder-250809.1}/scripts/hello.ecs +0 -0
  170. {easycoder-250807.2 → easycoder-250809.1}/scripts/points.ecs +0 -0
  171. {easycoder-250807.2 → easycoder-250809.1}/scripts/test.ecs +0 -0
  172. {easycoder-250807.2 → easycoder-250809.1}/scripts/tests.ecs +0 -0
  173. {easycoder-250807.2 → easycoder-250809.1}/test.py +0 -0
  174. {easycoder-250807.2 → easycoder-250809.1}/testsql.py +0 -0
@@ -1,11 +1,12 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: easycoder
3
- Version: 250807.2
3
+ Version: 250809.1
4
4
  Summary: Rapid scripting in English
5
5
  Keywords: compiler,scripting,prototyping,programming,coding,python,low code,hypertalk,computer language,learn to code
6
6
  Author-email: Graham Trott <gtanyware@gmail.com>
7
7
  Description-Content-Type: text/markdown
8
8
  Classifier: License :: OSI Approved :: MIT License
9
+ License-File: LICENSE
9
10
  Requires-Dist: pytz
10
11
  Requires-Dist: requests
11
12
  Requires-Dist: psutil
@@ -11,4 +11,4 @@ from .ec_pyside import *
11
11
  from .ec_timestamp import *
12
12
  from .ec_value import *
13
13
 
14
- __version__ = "250807.2"
14
+ __version__ = "250809.1"
@@ -1,4 +1,3 @@
1
-
2
1
  import os
3
2
  from .ec_handler import Handler
4
3
  from PySide6.QtWidgets import (
@@ -14,7 +13,7 @@ from PySide6.QtWidgets import (
14
13
  QSizePolicy,
15
14
  QGraphicsDropShadowEffect
16
15
  )
17
- from PySide6.QtGui import QFont, QIcon, QPixmap, QPainter, QColor
16
+ from PySide6.QtGui import QFont, QIcon, QPixmap, QPainter
18
17
  from PySide6.QtCore import Qt, QTimer, Signal, QRect
19
18
 
20
19
  class Keyboard(Handler):
@@ -65,12 +64,13 @@ class Keyboard(Handler):
65
64
  self._drag_active = False
66
65
  super().mouseReleaseEvent(event)
67
66
 
68
- def __init__(self, program, keyboardType, receiver, caller = None, parent=None):
67
+ def __init__(self, program, keyboardType, receiverLayout, receivers, caller = None, parent=None):
69
68
  super().__init__(program.compiler)
70
69
 
71
70
  self.program = program
72
71
  self.keyboardType = keyboardType
73
- self.receiver = receiver
72
+ self.receivers = receivers
73
+ self.selectedReceiver = receivers[0]
74
74
 
75
75
  dialog = QDialog(caller)
76
76
  self.dialog = dialog
@@ -78,9 +78,9 @@ class Keyboard(Handler):
78
78
  # dialog.setWindowTitle('')
79
79
  dialog.setWindowFlags(Qt.FramelessWindowHint)
80
80
  dialog.setModal(True)
81
- dialog.setFixedSize(500, 250)
81
+ dialog.setFixedWidth(500)
82
82
  dialog.setStyleSheet('background-color: white;border:1px solid black;')
83
- self.originalText = receiver.getContent()
83
+ self.originalText = self.selectedReceiver.getContent()
84
84
 
85
85
  # Add drop shadow
86
86
  shadow = QGraphicsDropShadowEffect(dialog)
@@ -95,7 +95,8 @@ class Keyboard(Handler):
95
95
  border = self.Border()
96
96
  border.iconClicked.connect(self.reject)
97
97
  layout.addWidget(border)
98
- layout.addWidget(VirtualKeyboard(keyboardType, 42, receiver, dialog.accept))
98
+ layout.addLayout(receiverLayout)
99
+ layout.addWidget(VirtualKeyboard(keyboardType, 42, self.selectedReceiver, dialog.accept))
99
100
 
100
101
  # Position at bottom of parent window
101
102
  dialog.show() # Ensure geometry is calculated
@@ -108,7 +109,7 @@ class Keyboard(Handler):
108
109
  dialog.exec()
109
110
 
110
111
  def reject(self):
111
- self.receiver.setContent(self.originalText)
112
+ self.selectedReceiver.setContent(self.originalText)
112
113
  self.dialog.reject()
113
114
 
114
115
  class TextReceiver():
@@ -48,7 +48,7 @@ class Program:
48
48
  self.externalControl = False
49
49
  self.ticker = 0
50
50
  self.running = True
51
- self.start()
51
+ # self.start()
52
52
 
53
53
  # This is called at 10msec intervals by the GUI code
54
54
  def flushCB(self):
@@ -1,8 +1,7 @@
1
1
  import sys
2
2
  from .ec_handler import Handler
3
3
  from .ec_classes import RuntimeError
4
- from .ec_keyboard import Keyboard, TextReceiver
5
- from PySide6.QtCore import Qt, QTimer
4
+ from PySide6.QtCore import Qt, QTimer, Signal
6
5
  from PySide6.QtGui import QPixmap
7
6
  from PySide6.QtWidgets import (
8
7
  QApplication,
@@ -80,6 +79,38 @@ class Graphics(Handler):
80
79
  def afterShown(self):
81
80
  if 'action' in self.record: self.record['action']()
82
81
 
82
+ class ClickableLineEdit(QLineEdit):
83
+ clicked = Signal()
84
+
85
+ def __init__(self):
86
+ super().__init__()
87
+ self.program = None
88
+
89
+ def setCallback(self, program, pc):
90
+ self.program = program
91
+ self.pc = pc
92
+
93
+ def mousePressEvent(self, event):
94
+ self.clicked.emit()
95
+ super().mousePressEvent(event)
96
+ if self.program != None: self.program.run(self.pc)
97
+
98
+ class ClickablePlainTextEdit(QPlainTextEdit):
99
+ clicked = Signal()
100
+
101
+ def __init__(self):
102
+ super().__init__()
103
+ self.program = None
104
+
105
+ def setCallback(self, program, pc):
106
+ self.program = program
107
+ self.pc = pc
108
+
109
+ def mousePressEvent(self, event):
110
+ self.clicked.emit()
111
+ super().mousePressEvent(event)
112
+ if self.program != None: self.program.run(self.pc)
113
+
83
114
  #############################################################################
84
115
  # Keyword handlers
85
116
 
@@ -297,6 +328,7 @@ class Graphics(Handler):
297
328
 
298
329
  def k_createLabel(self, command):
299
330
  text = self.compileConstant('')
331
+ size = self.compileConstant(20)
300
332
  while True:
301
333
  token = self.peek()
302
334
  if token == 'text':
@@ -304,7 +336,7 @@ class Graphics(Handler):
304
336
  text = self.nextValue()
305
337
  elif token == 'size':
306
338
  self.nextToken()
307
- command['size'] = self.nextValue()
339
+ size = self.nextValue()
308
340
  elif token == 'align':
309
341
  self.nextToken()
310
342
  token = self.nextToken()
@@ -312,6 +344,7 @@ class Graphics(Handler):
312
344
  command['align'] = token
313
345
  else: break
314
346
  command['text'] = text
347
+ command['size'] = size
315
348
  self.add(command)
316
349
  return True
317
350
 
@@ -340,11 +373,19 @@ class Graphics(Handler):
340
373
  return True
341
374
 
342
375
  def k_createLineEdit(self, command):
343
- if self.peek() == 'size':
344
- self.nextToken()
345
- size = self.nextValue()
346
- else: size = self.compileConstant(10)
376
+ text = self.compileConstant('')
377
+ size = self.compileConstant(40)
378
+ while True:
379
+ token = self.peek()
380
+ if token == 'text':
381
+ self.nextToken()
382
+ text = self.nextValue()
383
+ elif token == 'size':
384
+ self.nextToken()
385
+ size = self.nextValue()
386
+ else: break;
347
387
  command['size'] = size
388
+ command['text'] = text
348
389
  self.add(command)
349
390
  return True
350
391
 
@@ -479,6 +520,10 @@ class Graphics(Handler):
479
520
 
480
521
  def r_createLabel(self, command, record):
481
522
  label = QLabel(str(self.getRuntimeValue(command['text'])))
523
+ label.setStyleSheet("""
524
+ background-color: transparent;
525
+ border: none;
526
+ """)
482
527
  if 'size' in command:
483
528
  fm = label.fontMetrics()
484
529
  c = label.contentsMargins()
@@ -500,7 +545,7 @@ class Graphics(Handler):
500
545
  if 'size' in command:
501
546
  fm = pushbutton.fontMetrics()
502
547
  c = pushbutton.contentsMargins()
503
- w = fm.horizontalAdvance('m') * self.getRuntimeValue(command['size']) +c.left()+c.right()
548
+ w = fm.horizontalAdvance('m') * self.getRuntimeValue(command['size']) + c.left()+c.right()
504
549
  pushbutton.setMaximumWidth(w)
505
550
  record['widget'] = pushbutton
506
551
  return self.nextPC()
@@ -511,7 +556,8 @@ class Graphics(Handler):
511
556
  return self.nextPC()
512
557
 
513
558
  def r_createLineEdit(self, command, record):
514
- lineinput = QLineEdit()
559
+ lineinput = self.ClickableLineEdit()
560
+ lineinput.setText(self.getRuntimeValue(command['text']))
515
561
  fm = lineinput.fontMetrics()
516
562
  m = lineinput.textMargins()
517
563
  c = lineinput.contentsMargins()
@@ -521,7 +567,7 @@ class Graphics(Handler):
521
567
  return self.nextPC()
522
568
 
523
569
  def r_createMultiLineEdit(self, command, record):
524
- textinput = QPlainTextEdit()
570
+ textinput = self.ClickablePlainTextEdit()
525
571
  fontMetrics = textinput.fontMetrics()
526
572
  charWidth = fontMetrics.horizontalAdvance('x')
527
573
  charHeight = fontMetrics.height()
@@ -552,13 +598,13 @@ class Graphics(Handler):
552
598
  mainLayout.addWidget(QLabel(prompt))
553
599
  elif dialogType == 'lineedit':
554
600
  mainLayout.addWidget(QLabel(prompt))
555
- dialog.lineEdit = QLineEdit(dialog)
601
+ dialog.lineEdit = self.ClickableLineEdit(dialog)
556
602
  dialog.value = self.getRuntimeValue(command['value'])
557
603
  dialog.lineEdit.setText(dialog.value)
558
604
  mainLayout.addWidget(dialog.lineEdit)
559
605
  elif dialogType == 'multiline':
560
606
  mainLayout.addWidget(QLabel(prompt))
561
- dialog.textEdit = QPlainTextEdit(self)
607
+ dialog.textEdit = self.ClickablePlainTextEdit(self)
562
608
  dialog.textEdit.setText(dialog.value)
563
609
  mainLayout.addWidget(dialog.textEdit)
564
610
  buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
@@ -690,7 +736,7 @@ class Graphics(Handler):
690
736
  def r_multiline(self, command):
691
737
  return self.nextPC()
692
738
 
693
- # on click {pushbutton}
739
+ # on click {pushbutton}/{lineinput}/{multiline}
694
740
  # on select {combobox}/{listbox}
695
741
  # on tick
696
742
  def k_on(self, command):
@@ -723,7 +769,7 @@ class Graphics(Handler):
723
769
  if token == 'click':
724
770
  if self.nextIsSymbol():
725
771
  record = self.getSymbolRecord()
726
- if record['keyword'] == 'pushbutton':
772
+ if record['keyword'] in ['pushbutton', 'lineinput', 'multiline']:
727
773
  command['name'] = record['name']
728
774
  setupOn()
729
775
  return True
@@ -770,6 +816,8 @@ class Graphics(Handler):
770
816
  keyword = record['keyword']
771
817
  if keyword == 'pushbutton':
772
818
  widget.clicked.connect(lambda: self.run(command['goto']))
819
+ if keyword in ['lineinput', 'multiline']:
820
+ widget.setCallback(self.program, command['goto'])
773
821
  elif keyword == 'combobox':
774
822
  widget.currentIndexChanged.connect(lambda: self.run(command['goto']))
775
823
  elif keyword == 'listbox':
@@ -895,7 +943,7 @@ class Graphics(Handler):
895
943
  self.skip('of')
896
944
  if self.nextIsSymbol():
897
945
  record = self.getSymbolRecord()
898
- if record['keyword'] in ['label', 'pushbutton', 'lineinput', 'multiline']:
946
+ if record['keyword'] in ['label', 'pushbutton', 'lineinput', 'multiline', 'element']:
899
947
  command['name'] = record['name']
900
948
  self.skip('to')
901
949
  command['value'] = self.nextValue()
@@ -968,7 +1016,8 @@ class Graphics(Handler):
968
1016
  widget = self.getVariable(command['name'])['widget']
969
1017
  text = self.getRuntimeValue(command['value'])
970
1018
  keyword = record['keyword']
971
- if keyword in ['label', 'pushbutton', 'lineinput']:
1019
+ setText = getattr(widget, "setText", None)
1020
+ if callable(setText):
972
1021
  widget.setText(text)
973
1022
  elif keyword == 'multiline':
974
1023
  widget.setPlainText(text)
@@ -0,0 +1,7 @@
1
+ #!/bin/python3
2
+
3
+ import os
4
+ from easycoder import Program
5
+
6
+ os.chdir('../../rbr/roombyroom/Controller/ui')
7
+ Program('rbrconf.ecs').start()
@@ -4,4 +4,4 @@ import os
4
4
  from easycoder import Program
5
5
 
6
6
  os.chdir('../../rbr/roombyroom/Controller/ui')
7
- Program('rbr_ui.ecs')
7
+ Program('rbr_ui.ecs').start()
@@ -1,26 +0,0 @@
1
- ! Find an XR device
2
-
3
- script FindXR
4
-
5
- variable N
6
- variable IPAddr
7
- variable Data
8
-
9
- put system `hostname -I` into IPAddr
10
- put the position of the last `.` in IPAddr into N
11
- increment N
12
- put left N of IPAddr into IPAddr
13
- print `Looking for an XR server on network ` cat IPAddr cat `x`
14
- put 1 into N
15
- while N is less than 255
16
- begin
17
- get Data from `http://` cat IPAddr cat N timeout 1 or put empty into Data
18
- if left 6 of Data is `RBR-XR`
19
- begin
20
- print IPAddr cat N cat `: Data: ` cat Data
21
- exit
22
- end
23
- increment N
24
- end
25
-
26
- exit
@@ -1,7 +0,0 @@
1
- #!/bin/python3
2
-
3
- import os
4
- from easycoder import Program
5
-
6
- os.chdir('../../rbr/')
7
- Program('rbrconf.ecs')
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes