PyDMConverter 1.0.5__tar.gz → 1.0.6__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.
Files changed (203) hide show
  1. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/PKG-INFO +1 -1
  2. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/PyDMConverter.egg-info/PKG-INFO +1 -1
  3. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/PyDMConverter.egg-info/SOURCES.txt +16 -0
  4. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/PyDMConverter.egg-info/scm_file_list.json +144 -128
  5. pydmconverter-1.0.6/PyDMConverter.egg-info/scm_version.json +8 -0
  6. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/__main__.py +6 -4
  7. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/edm/edm_qt.py +43 -15
  8. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/edm/ir_adapter.py +370 -21
  9. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/edm/parser.py +23 -3
  10. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/edm/parser_helpers.py +13 -2
  11. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/builder.py +68 -6
  12. pydmconverter-1.0.6/pydmconverter/ir/data/VENDORED_SCHEMA.md +26 -0
  13. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/screen-ir.schema.json +1 -1
  14. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/absolute-canvas.json +2 -1
  15. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/embedded-display.json +29 -14
  16. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/line.json +1 -1
  17. pydmconverter-1.0.6/pydmconverter/ir/data/widget-registry/polygon.json +83 -0
  18. pydmconverter-1.0.6/pydmconverter/ir/data/widget-registry/pv-button.json +181 -0
  19. pydmconverter-1.0.6/pydmconverter/ir/data/widget-registry/pv-byte-led.json +112 -0
  20. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/pv-enum-combobox.json +4 -2
  21. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/pv-label.json +20 -3
  22. pydmconverter-1.0.6/pydmconverter/ir/data/widget-registry/pv-led.json +92 -0
  23. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/pv-radio-group.json +7 -2
  24. pydmconverter-1.0.6/pydmconverter/ir/data/widget-registry/pv-spinbox.json +60 -0
  25. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/pv-text-input.json +7 -2
  26. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/regular-button.json +6 -1
  27. pydmconverter-1.0.6/pydmconverter/ir/data/widget-registry/related-display-button.json +105 -0
  28. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/shell-command-button.json +7 -2
  29. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/text-label.json +7 -2
  30. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/fox.py +31 -2
  31. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/macros.py +4 -2
  32. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/model.py +4 -3
  33. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/transforms.py +56 -0
  34. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/react.py +34 -4
  35. pydmconverter-1.0.6/pydmconverter/ui/ir_adapter.py +455 -0
  36. pydmconverter-1.0.6/tests/edm/fixtures/calc.list +5 -0
  37. pydmconverter-1.0.6/tests/edm/fixtures/calc_rules.edl +62 -0
  38. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/integration_combined.screen.json +4 -2
  39. pydmconverter-1.0.6/tests/edm/fixtures/pip_menu.edl +92 -0
  40. pydmconverter-1.0.6/tests/edm/fixtures/symbol_states.edl +80 -0
  41. pydmconverter-1.0.6/tests/edm/fixtures/symbol_two_state.edl +44 -0
  42. pydmconverter-1.0.6/tests/edm/test_batch2_widget_fixes.py +76 -0
  43. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_byte_and_related.py +1 -1
  44. pydmconverter-1.0.6/tests/edm/test_calc_rules_and_locals.py +61 -0
  45. pydmconverter-1.0.6/tests/edm/test_channel_attrs_and_alarm_rules.py +174 -0
  46. pydmconverter-1.0.6/tests/edm/test_fidelity_edm_batch.py +59 -0
  47. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_graphics_widgets.py +14 -8
  48. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_ir_adapter.py +1 -1
  49. pydmconverter-1.0.6/tests/edm/test_pip_and_macro_declarations.py +47 -0
  50. pydmconverter-1.0.6/tests/edm/test_symbol_states.py +41 -0
  51. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/test_ir_builder.py +31 -1
  52. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/test_ir_model.py +14 -3
  53. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/test_ir_transforms.py +43 -0
  54. pydmconverter-1.0.6/tests/test_ui_rules.py +89 -0
  55. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ui/test_byte_and_related.py +1 -1
  56. pydmconverter-1.0.6/tests/ui/test_ir_adapter.py +326 -0
  57. pydmconverter-1.0.6/tests/ui/test_template_repeater.py +123 -0
  58. pydmconverter-1.0.6/tests/ui/test_unmapped_classes.py +190 -0
  59. pydmconverter-1.0.5/PyDMConverter.egg-info/scm_version.json +0 -8
  60. pydmconverter-1.0.5/pydmconverter/ir/data/VENDORED_SCHEMA.md +0 -25
  61. pydmconverter-1.0.5/pydmconverter/ir/data/widget-registry/pv-button.json +0 -57
  62. pydmconverter-1.0.5/pydmconverter/ir/data/widget-registry/pv-byte-led.json +0 -58
  63. pydmconverter-1.0.5/pydmconverter/ir/data/widget-registry/pv-led.json +0 -50
  64. pydmconverter-1.0.5/pydmconverter/ir/data/widget-registry/related-display-button.json +0 -60
  65. pydmconverter-1.0.5/pydmconverter/ui/ir_adapter.py +0 -181
  66. pydmconverter-1.0.5/tests/ui/test_ir_adapter.py +0 -153
  67. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  68. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  69. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/.github/workflows/gh-pages.yml +0 -0
  70. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/.github/workflows/lint.yml +0 -0
  71. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/.github/workflows/pypi_release.yml +0 -0
  72. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/.github/workflows/tests.yml +0 -0
  73. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/.gitignore +0 -0
  74. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/.pre-commit-config.yaml +0 -0
  75. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/LICENSE +0 -0
  76. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/PyDMConverter.egg-info/dependency_links.txt +0 -0
  77. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/PyDMConverter.egg-info/entry_points.txt +0 -0
  78. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/PyDMConverter.egg-info/requires.txt +0 -0
  79. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/PyDMConverter.egg-info/top_level.txt +0 -0
  80. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/README.md +0 -0
  81. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/resources/file_minus.png +0 -0
  82. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/resources/file_plus.png +0 -0
  83. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/resources/file_x.png +0 -0
  84. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/resources/folder_plus.png +0 -0
  85. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/resources/folder_search.png +0 -0
  86. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/resources/play_circle_outline.png +0 -0
  87. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/resources/settings.png +0 -0
  88. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/model/__init__.py +0 -0
  89. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/model/app_model.py +0 -0
  90. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/model/options_model.py +0 -0
  91. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/view/__init__.py +0 -0
  92. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/view/file_select_widget.py +0 -0
  93. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/view/main_window.py +0 -0
  94. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/view/main_window.ui +0 -0
  95. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/view/options_window.py +0 -0
  96. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/app/src/view/output_select_dialog.py +0 -0
  97. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/arguments.md +0 -0
  98. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/images/pydmconverter.png +0 -0
  99. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/index.md +0 -0
  100. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/custom_types.md +0 -0
  101. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/edm/converter.md +0 -0
  102. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/edm/converter_helpers.md +0 -0
  103. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/edm/menumux.md +0 -0
  104. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/edm/parser.md +0 -0
  105. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/edm/parser_helpers.md +0 -0
  106. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/index.md +0 -0
  107. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/pydm-converter-tool.md +0 -0
  108. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/widgets.md +0 -0
  109. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/reference/widgets_helpers.md +0 -0
  110. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/docs/user_guide.md +0 -0
  111. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/environment.yml +0 -0
  112. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/examples/TEM_mapping.edl +0 -0
  113. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/examples/all_bsy0_main.edl +0 -0
  114. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/examples/all_bsy0_main_with_groups.edl +0 -0
  115. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/examples/prosilica.edl +0 -0
  116. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/mkdocs.yml +0 -0
  117. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/__init__.py +0 -0
  118. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/custom_types.py +0 -0
  119. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/edm/__init__.py +0 -0
  120. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/edm/converter.py +0 -0
  121. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/edm/converter_helpers.py +0 -0
  122. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/edm/menumux.py +0 -0
  123. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/exceptions.py +0 -0
  124. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/__init__.py +0 -0
  125. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/base.py +0 -0
  126. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/.beaver-snapshot-sha +0 -0
  127. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/arc.json +0 -0
  128. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/ellipse.json +0 -0
  129. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/frame.json +0 -0
  130. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/group-box.json +0 -0
  131. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/group.json +0 -0
  132. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/image-view.json +0 -0
  133. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/pv-checkbox.json +0 -0
  134. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/pv-meter.json +0 -0
  135. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/pv-progress-bar.json +0 -0
  136. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/pv-slider.json +0 -0
  137. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/qwidget-container.json +0 -0
  138. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/rectangle.json +0 -0
  139. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/scroll-area.json +0 -0
  140. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/tabs.json +0 -0
  141. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/data/widget-registry/waveform-plot.json +0 -0
  142. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/emit.py +0 -0
  143. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/ids.py +0 -0
  144. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/registry.py +0 -0
  145. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/schema.py +0 -0
  146. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ir/source.py +0 -0
  147. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/launch_gui.sh +0 -0
  148. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/sites/__init__.py +0 -0
  149. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/sites/slac.py +0 -0
  150. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/ui/__init__.py +0 -0
  151. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/widgets.py +0 -0
  152. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pydmconverter/widgets_helpers.py +0 -0
  153. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/pyproject.toml +0 -0
  154. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/setup.cfg +0 -0
  155. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/__init__.py +0 -0
  156. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/basic_widgets.edl +0 -0
  157. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/byte_and_related.edl +0 -0
  158. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/colors.edl +0 -0
  159. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/colors.list +0 -0
  160. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/exit_button.edl +0 -0
  161. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/graphics_arc.edl +0 -0
  162. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/graphics_bars.edl +0 -0
  163. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/graphics_circle.edl +0 -0
  164. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/graphics_group.edl +0 -0
  165. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/graphics_line.edl +0 -0
  166. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/graphics_rect.edl +0 -0
  167. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/indicator.edl +0 -0
  168. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/integration_combined.edl +0 -0
  169. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/meter.edl +0 -0
  170. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/misc_buttons.edl +0 -0
  171. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/mmv_multiline.edl +0 -0
  172. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/png.edl +0 -0
  173. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/radio.edl +0 -0
  174. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/shell_cmd.edl +0 -0
  175. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/textdsp.edl +0 -0
  176. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/unknown.edl +0 -0
  177. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/fixtures/visibility.edl +0 -0
  178. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_colors.py +0 -0
  179. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_control_widgets.py +0 -0
  180. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_converter.py +0 -0
  181. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_converter_helpers.py +0 -0
  182. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_integration_combined.py +0 -0
  183. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_parser.py +0 -0
  184. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_parser_helpers.py +0 -0
  185. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/edm/test_visibility_rules.py +0 -0
  186. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/__init__.py +0 -0
  187. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/conftest.py +0 -0
  188. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/test_ir_emit.py +0 -0
  189. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/test_ir_fox.py +0 -0
  190. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/test_ir_ids.py +0 -0
  191. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/test_ir_registry.py +0 -0
  192. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ir/test_ir_schema.py +0 -0
  193. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/test_headless_import.py +0 -0
  194. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/test_main.py +0 -0
  195. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/test_options_model.py +0 -0
  196. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/test_react.py +0 -0
  197. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/test_sites.py +0 -0
  198. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/test_widgets.py +0 -0
  199. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/test_widgets_helpers.py +0 -0
  200. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ui/__init__.py +0 -0
  201. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ui/fixtures/basic_widgets.ui +0 -0
  202. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ui/fixtures/byte_and_related.ui +0 -0
  203. {pydmconverter-1.0.5 → pydmconverter-1.0.6}/tests/ui/fixtures/newly_supported.ui +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyDMConverter
3
- Version: 1.0.5
3
+ Version: 1.0.6
4
4
  Summary: converter to generate pydm .ui files from other display managers.
5
5
  Author: Devan Agrawal, Zach Domke, Ryan McClanahan, Alexander Ng, Logan Somoza, Alexandria Ikuma
6
6
  Author-email: Yekta Yazar <yazar@slac.stanford.edu>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyDMConverter
3
- Version: 1.0.5
3
+ Version: 1.0.6
4
4
  Summary: converter to generate pydm .ui files from other display managers.
5
5
  Author: Devan Agrawal, Zach Domke, Ryan McClanahan, Alexander Ng, Logan Somoza, Alexandria Ikuma
6
6
  Author-email: Yekta Yazar <yazar@slac.stanford.edu>
@@ -93,6 +93,7 @@ pydmconverter/ir/data/widget-registry/group-box.json
93
93
  pydmconverter/ir/data/widget-registry/group.json
94
94
  pydmconverter/ir/data/widget-registry/image-view.json
95
95
  pydmconverter/ir/data/widget-registry/line.json
96
+ pydmconverter/ir/data/widget-registry/polygon.json
96
97
  pydmconverter/ir/data/widget-registry/pv-button.json
97
98
  pydmconverter/ir/data/widget-registry/pv-byte-led.json
98
99
  pydmconverter/ir/data/widget-registry/pv-checkbox.json
@@ -103,6 +104,7 @@ pydmconverter/ir/data/widget-registry/pv-meter.json
103
104
  pydmconverter/ir/data/widget-registry/pv-progress-bar.json
104
105
  pydmconverter/ir/data/widget-registry/pv-radio-group.json
105
106
  pydmconverter/ir/data/widget-registry/pv-slider.json
107
+ pydmconverter/ir/data/widget-registry/pv-spinbox.json
106
108
  pydmconverter/ir/data/widget-registry/pv-text-input.json
107
109
  pydmconverter/ir/data/widget-registry/qwidget-container.json
108
110
  pydmconverter/ir/data/widget-registry/rectangle.json
@@ -123,21 +125,30 @@ tests/test_main.py
123
125
  tests/test_options_model.py
124
126
  tests/test_react.py
125
127
  tests/test_sites.py
128
+ tests/test_ui_rules.py
126
129
  tests/test_widgets.py
127
130
  tests/test_widgets_helpers.py
131
+ tests/edm/test_batch2_widget_fixes.py
128
132
  tests/edm/test_byte_and_related.py
133
+ tests/edm/test_calc_rules_and_locals.py
134
+ tests/edm/test_channel_attrs_and_alarm_rules.py
129
135
  tests/edm/test_colors.py
130
136
  tests/edm/test_control_widgets.py
131
137
  tests/edm/test_converter.py
132
138
  tests/edm/test_converter_helpers.py
139
+ tests/edm/test_fidelity_edm_batch.py
133
140
  tests/edm/test_graphics_widgets.py
134
141
  tests/edm/test_integration_combined.py
135
142
  tests/edm/test_ir_adapter.py
136
143
  tests/edm/test_parser.py
137
144
  tests/edm/test_parser_helpers.py
145
+ tests/edm/test_pip_and_macro_declarations.py
146
+ tests/edm/test_symbol_states.py
138
147
  tests/edm/test_visibility_rules.py
139
148
  tests/edm/fixtures/basic_widgets.edl
140
149
  tests/edm/fixtures/byte_and_related.edl
150
+ tests/edm/fixtures/calc.list
151
+ tests/edm/fixtures/calc_rules.edl
141
152
  tests/edm/fixtures/colors.edl
142
153
  tests/edm/fixtures/colors.list
143
154
  tests/edm/fixtures/exit_button.edl
@@ -153,9 +164,12 @@ tests/edm/fixtures/integration_combined.screen.json
153
164
  tests/edm/fixtures/meter.edl
154
165
  tests/edm/fixtures/misc_buttons.edl
155
166
  tests/edm/fixtures/mmv_multiline.edl
167
+ tests/edm/fixtures/pip_menu.edl
156
168
  tests/edm/fixtures/png.edl
157
169
  tests/edm/fixtures/radio.edl
158
170
  tests/edm/fixtures/shell_cmd.edl
171
+ tests/edm/fixtures/symbol_states.edl
172
+ tests/edm/fixtures/symbol_two_state.edl
159
173
  tests/edm/fixtures/textdsp.edl
160
174
  tests/edm/fixtures/unknown.edl
161
175
  tests/edm/fixtures/visibility.edl
@@ -172,6 +186,8 @@ tests/ir/test_ir_transforms.py
172
186
  tests/ui/__init__.py
173
187
  tests/ui/test_byte_and_related.py
174
188
  tests/ui/test_ir_adapter.py
189
+ tests/ui/test_template_repeater.py
190
+ tests/ui/test_unmapped_classes.py
175
191
  tests/ui/fixtures/basic_widgets.ui
176
192
  tests/ui/fixtures/byte_and_related.ui
177
193
  tests/ui/fixtures/newly_supported.ui
@@ -1,173 +1,189 @@
1
1
  {
2
2
  "files": [
3
+ "mkdocs.yml",
3
4
  ".pre-commit-config.yaml",
4
- "README.md",
5
+ "pyproject.toml",
5
6
  "environment.yml",
6
7
  "LICENSE",
7
- "pyproject.toml",
8
- "mkdocs.yml",
8
+ "README.md",
9
9
  ".gitignore",
10
- "docs/arguments.md",
11
- "docs/user_guide.md",
12
- "docs/index.md",
13
- "docs/images/pydmconverter.png",
14
- "docs/reference/widgets_helpers.md",
15
- "docs/reference/widgets.md",
16
- "docs/reference/custom_types.md",
17
- "docs/reference/pydm-converter-tool.md",
18
- "docs/reference/index.md",
19
- "docs/reference/edm/parser_helpers.md",
20
- "docs/reference/edm/parser.md",
21
- "docs/reference/edm/menumux.md",
22
- "docs/reference/edm/converter.md",
23
- "docs/reference/edm/converter_helpers.md",
24
- "tests/test_react.py",
10
+ ".github/ISSUE_TEMPLATE/bug-report.yml",
11
+ ".github/ISSUE_TEMPLATE/feature-request.yml",
12
+ ".github/workflows/pypi_release.yml",
13
+ ".github/workflows/lint.yml",
14
+ ".github/workflows/gh-pages.yml",
15
+ ".github/workflows/tests.yml",
16
+ "examples/all_bsy0_main.edl",
17
+ "examples/prosilica.edl",
18
+ "examples/all_bsy0_main_with_groups.edl",
19
+ "examples/TEM_mapping.edl",
25
20
  "tests/test_headless_import.py",
26
- "tests/__init__.py",
21
+ "tests/test_react.py",
27
22
  "tests/test_widgets_helpers.py",
28
23
  "tests/test_widgets.py",
29
- "tests/test_sites.py",
24
+ "tests/__init__.py",
30
25
  "tests/test_options_model.py",
26
+ "tests/test_sites.py",
31
27
  "tests/test_main.py",
32
- "tests/ir/test_ir_transforms.py",
33
- "tests/ir/test_ir_fox.py",
34
- "tests/ir/test_ir_ids.py",
35
- "tests/ir/__init__.py",
36
- "tests/ir/test_ir_model.py",
37
- "tests/ir/test_ir_builder.py",
38
- "tests/ir/conftest.py",
39
- "tests/ir/test_ir_registry.py",
40
- "tests/ir/test_ir_emit.py",
41
- "tests/ir/test_ir_schema.py",
42
- "tests/ui/__init__.py",
43
- "tests/ui/test_ir_adapter.py",
44
- "tests/ui/test_byte_and_related.py",
45
- "tests/ui/fixtures/byte_and_related.ui",
46
- "tests/ui/fixtures/basic_widgets.ui",
47
- "tests/ui/fixtures/newly_supported.ui",
48
- "tests/edm/test_converter_helpers.py",
49
- "tests/edm/test_ir_adapter.py",
28
+ "tests/test_ui_rules.py",
29
+ "tests/edm/test_channel_attrs_and_alarm_rules.py",
30
+ "tests/edm/test_graphics_widgets.py",
31
+ "tests/edm/test_control_widgets.py",
32
+ "tests/edm/test_symbol_states.py",
50
33
  "tests/edm/test_parser_helpers.py",
51
34
  "tests/edm/test_integration_combined.py",
35
+ "tests/edm/test_visibility_rules.py",
36
+ "tests/edm/test_colors.py",
37
+ "tests/edm/test_fidelity_edm_batch.py",
38
+ "tests/edm/test_byte_and_related.py",
39
+ "tests/edm/test_pip_and_macro_declarations.py",
40
+ "tests/edm/test_calc_rules_and_locals.py",
52
41
  "tests/edm/test_parser.py",
42
+ "tests/edm/test_converter_helpers.py",
43
+ "tests/edm/test_batch2_widget_fixes.py",
53
44
  "tests/edm/test_converter.py",
54
- "tests/edm/test_byte_and_related.py",
55
- "tests/edm/test_graphics_widgets.py",
56
- "tests/edm/test_control_widgets.py",
57
- "tests/edm/test_colors.py",
58
- "tests/edm/test_visibility_rules.py",
45
+ "tests/edm/test_ir_adapter.py",
46
+ "tests/edm/fixtures/byte_and_related.edl",
59
47
  "tests/edm/fixtures/graphics_arc.edl",
60
- "tests/edm/fixtures/textdsp.edl",
61
- "tests/edm/fixtures/graphics_rect.edl",
62
48
  "tests/edm/fixtures/unknown.edl",
49
+ "tests/edm/fixtures/pip_menu.edl",
50
+ "tests/edm/fixtures/png.edl",
51
+ "tests/edm/fixtures/visibility.edl",
52
+ "tests/edm/fixtures/calc_rules.edl",
63
53
  "tests/edm/fixtures/exit_button.edl",
64
- "tests/edm/fixtures/basic_widgets.edl",
54
+ "tests/edm/fixtures/graphics_line.edl",
55
+ "tests/edm/fixtures/meter.edl",
65
56
  "tests/edm/fixtures/integration_combined.edl",
66
- "tests/edm/fixtures/visibility.edl",
67
- "tests/edm/fixtures/shell_cmd.edl",
68
- "tests/edm/fixtures/colors.list",
57
+ "tests/edm/fixtures/radio.edl",
58
+ "tests/edm/fixtures/colors.edl",
59
+ "tests/edm/fixtures/calc.list",
60
+ "tests/edm/fixtures/symbol_two_state.edl",
61
+ "tests/edm/fixtures/symbol_states.edl",
69
62
  "tests/edm/fixtures/graphics_bars.edl",
70
- "tests/edm/fixtures/mmv_multiline.edl",
71
63
  "tests/edm/fixtures/misc_buttons.edl",
72
- "tests/edm/fixtures/colors.edl",
73
- "tests/edm/fixtures/graphics_line.edl",
74
- "tests/edm/fixtures/radio.edl",
64
+ "tests/edm/fixtures/textdsp.edl",
75
65
  "tests/edm/fixtures/indicator.edl",
76
- "tests/edm/fixtures/byte_and_related.edl",
77
- "tests/edm/fixtures/png.edl",
78
- "tests/edm/fixtures/integration_combined.screen.json",
66
+ "tests/edm/fixtures/shell_cmd.edl",
79
67
  "tests/edm/fixtures/graphics_circle.edl",
80
- "tests/edm/fixtures/meter.edl",
68
+ "tests/edm/fixtures/colors.list",
69
+ "tests/edm/fixtures/mmv_multiline.edl",
70
+ "tests/edm/fixtures/basic_widgets.edl",
71
+ "tests/edm/fixtures/integration_combined.screen.json",
81
72
  "tests/edm/fixtures/graphics_group.edl",
82
- "app/resources/file_minus.png",
83
- "app/resources/folder_search.png",
84
- "app/resources/play_circle_outline.png",
85
- "app/resources/settings.png",
86
- "app/resources/file_plus.png",
87
- "app/resources/file_x.png",
88
- "app/resources/folder_plus.png",
89
- "app/src/view/output_select_dialog.py",
90
- "app/src/view/main_window.ui",
91
- "app/src/view/__init__.py",
92
- "app/src/view/main_window.py",
93
- "app/src/view/file_select_widget.py",
94
- "app/src/view/options_window.py",
95
- "app/src/model/__init__.py",
96
- "app/src/model/app_model.py",
97
- "app/src/model/options_model.py",
98
- "pydmconverter/react.py",
73
+ "tests/edm/fixtures/graphics_rect.edl",
74
+ "tests/ui/test_template_repeater.py",
75
+ "tests/ui/test_unmapped_classes.py",
76
+ "tests/ui/__init__.py",
77
+ "tests/ui/test_byte_and_related.py",
78
+ "tests/ui/test_ir_adapter.py",
79
+ "tests/ui/fixtures/basic_widgets.ui",
80
+ "tests/ui/fixtures/byte_and_related.ui",
81
+ "tests/ui/fixtures/newly_supported.ui",
82
+ "tests/ir/test_ir_schema.py",
83
+ "tests/ir/test_ir_registry.py",
84
+ "tests/ir/test_ir_fox.py",
85
+ "tests/ir/test_ir_ids.py",
86
+ "tests/ir/test_ir_builder.py",
87
+ "tests/ir/__init__.py",
88
+ "tests/ir/test_ir_transforms.py",
89
+ "tests/ir/test_ir_model.py",
90
+ "tests/ir/conftest.py",
91
+ "tests/ir/test_ir_emit.py",
99
92
  "pydmconverter/widgets.py",
93
+ "pydmconverter/react.py",
100
94
  "pydmconverter/__init__.py",
101
- "pydmconverter/exceptions.py",
102
95
  "pydmconverter/launch_gui.sh",
96
+ "pydmconverter/exceptions.py",
97
+ "pydmconverter/__main__.py",
103
98
  "pydmconverter/widgets_helpers.py",
104
99
  "pydmconverter/custom_types.py",
105
- "pydmconverter/__main__.py",
106
- "pydmconverter/ir/model.py",
107
- "pydmconverter/ir/__init__.py",
108
- "pydmconverter/ir/source.py",
100
+ "pydmconverter/edm/menumux.py",
101
+ "pydmconverter/edm/parser.py",
102
+ "pydmconverter/edm/converter_helpers.py",
103
+ "pydmconverter/edm/ir_adapter.py",
104
+ "pydmconverter/edm/edm_qt.py",
105
+ "pydmconverter/edm/__init__.py",
106
+ "pydmconverter/edm/parser_helpers.py",
107
+ "pydmconverter/edm/converter.py",
108
+ "pydmconverter/ui/ir_adapter.py",
109
+ "pydmconverter/ui/__init__.py",
110
+ "pydmconverter/sites/__init__.py",
111
+ "pydmconverter/sites/slac.py",
109
112
  "pydmconverter/ir/schema.py",
110
- "pydmconverter/ir/fox.py",
111
- "pydmconverter/ir/emit.py",
113
+ "pydmconverter/ir/macros.py",
114
+ "pydmconverter/ir/builder.py",
112
115
  "pydmconverter/ir/transforms.py",
116
+ "pydmconverter/ir/fox.py",
113
117
  "pydmconverter/ir/ids.py",
114
- "pydmconverter/ir/builder.py",
115
- "pydmconverter/ir/macros.py",
118
+ "pydmconverter/ir/__init__.py",
116
119
  "pydmconverter/ir/registry.py",
120
+ "pydmconverter/ir/source.py",
121
+ "pydmconverter/ir/model.py",
117
122
  "pydmconverter/ir/base.py",
118
- "pydmconverter/ir/data/screen-ir.schema.json",
123
+ "pydmconverter/ir/emit.py",
119
124
  "pydmconverter/ir/data/VENDORED_SCHEMA.md",
120
- "pydmconverter/ir/data/widget-registry/qwidget-container.json",
121
- "pydmconverter/ir/data/widget-registry/rectangle.json",
122
- "pydmconverter/ir/data/widget-registry/pv-byte-led.json",
123
- "pydmconverter/ir/data/widget-registry/pv-label.json",
125
+ "pydmconverter/ir/data/screen-ir.schema.json",
126
+ "pydmconverter/ir/data/widget-registry/line.json",
127
+ "pydmconverter/ir/data/widget-registry/arc.json",
124
128
  "pydmconverter/ir/data/widget-registry/pv-button.json",
125
- "pydmconverter/ir/data/widget-registry/regular-button.json",
129
+ "pydmconverter/ir/data/widget-registry/pv-enum-combobox.json",
130
+ "pydmconverter/ir/data/widget-registry/waveform-plot.json",
126
131
  "pydmconverter/ir/data/widget-registry/pv-progress-bar.json",
127
132
  "pydmconverter/ir/data/widget-registry/text-label.json",
128
- "pydmconverter/ir/data/widget-registry/pv-slider.json",
129
- "pydmconverter/ir/data/widget-registry/tabs.json",
130
- "pydmconverter/ir/data/widget-registry/ellipse.json",
131
- "pydmconverter/ir/data/widget-registry/pv-checkbox.json",
133
+ "pydmconverter/ir/data/widget-registry/shell-command-button.json",
134
+ "pydmconverter/ir/data/widget-registry/pv-meter.json",
135
+ "pydmconverter/ir/data/widget-registry/pv-led.json",
132
136
  "pydmconverter/ir/data/widget-registry/group-box.json",
133
- "pydmconverter/ir/data/widget-registry/image-view.json",
134
- "pydmconverter/ir/data/widget-registry/group.json",
135
- "pydmconverter/ir/data/widget-registry/pv-enum-combobox.json",
136
- "pydmconverter/ir/data/widget-registry/line.json",
137
- "pydmconverter/ir/data/widget-registry/pv-text-input.json",
138
137
  "pydmconverter/ir/data/widget-registry/.beaver-snapshot-sha",
139
- "pydmconverter/ir/data/widget-registry/scroll-area.json",
138
+ "pydmconverter/ir/data/widget-registry/pv-slider.json",
139
+ "pydmconverter/ir/data/widget-registry/pv-byte-led.json",
140
140
  "pydmconverter/ir/data/widget-registry/absolute-canvas.json",
141
- "pydmconverter/ir/data/widget-registry/frame.json",
142
- "pydmconverter/ir/data/widget-registry/pv-meter.json",
143
- "pydmconverter/ir/data/widget-registry/arc.json",
144
- "pydmconverter/ir/data/widget-registry/embedded-display.json",
145
- "pydmconverter/ir/data/widget-registry/waveform-plot.json",
146
- "pydmconverter/ir/data/widget-registry/shell-command-button.json",
141
+ "pydmconverter/ir/data/widget-registry/group.json",
142
+ "pydmconverter/ir/data/widget-registry/image-view.json",
143
+ "pydmconverter/ir/data/widget-registry/pv-checkbox.json",
144
+ "pydmconverter/ir/data/widget-registry/rectangle.json",
147
145
  "pydmconverter/ir/data/widget-registry/related-display-button.json",
146
+ "pydmconverter/ir/data/widget-registry/qwidget-container.json",
147
+ "pydmconverter/ir/data/widget-registry/ellipse.json",
148
+ "pydmconverter/ir/data/widget-registry/pv-text-input.json",
149
+ "pydmconverter/ir/data/widget-registry/pv-spinbox.json",
150
+ "pydmconverter/ir/data/widget-registry/pv-label.json",
151
+ "pydmconverter/ir/data/widget-registry/frame.json",
148
152
  "pydmconverter/ir/data/widget-registry/pv-radio-group.json",
149
- "pydmconverter/ir/data/widget-registry/pv-led.json",
150
- "pydmconverter/ui/__init__.py",
151
- "pydmconverter/ui/ir_adapter.py",
152
- "pydmconverter/sites/__init__.py",
153
- "pydmconverter/sites/slac.py",
154
- "pydmconverter/edm/__init__.py",
155
- "pydmconverter/edm/ir_adapter.py",
156
- "pydmconverter/edm/converter_helpers.py",
157
- "pydmconverter/edm/menumux.py",
158
- "pydmconverter/edm/parser.py",
159
- "pydmconverter/edm/converter.py",
160
- "pydmconverter/edm/edm_qt.py",
161
- "pydmconverter/edm/parser_helpers.py",
162
- "examples/prosilica.edl",
163
- "examples/TEM_mapping.edl",
164
- "examples/all_bsy0_main.edl",
165
- "examples/all_bsy0_main_with_groups.edl",
166
- ".github/ISSUE_TEMPLATE/feature-request.yml",
167
- ".github/ISSUE_TEMPLATE/bug-report.yml",
168
- ".github/workflows/pypi_release.yml",
169
- ".github/workflows/tests.yml",
170
- ".github/workflows/lint.yml",
171
- ".github/workflows/gh-pages.yml"
153
+ "pydmconverter/ir/data/widget-registry/polygon.json",
154
+ "pydmconverter/ir/data/widget-registry/scroll-area.json",
155
+ "pydmconverter/ir/data/widget-registry/regular-button.json",
156
+ "pydmconverter/ir/data/widget-registry/embedded-display.json",
157
+ "pydmconverter/ir/data/widget-registry/tabs.json",
158
+ "app/resources/file_plus.png",
159
+ "app/resources/play_circle_outline.png",
160
+ "app/resources/file_minus.png",
161
+ "app/resources/settings.png",
162
+ "app/resources/file_x.png",
163
+ "app/resources/folder_plus.png",
164
+ "app/resources/folder_search.png",
165
+ "app/src/model/app_model.py",
166
+ "app/src/model/options_model.py",
167
+ "app/src/model/__init__.py",
168
+ "app/src/view/main_window.ui",
169
+ "app/src/view/output_select_dialog.py",
170
+ "app/src/view/options_window.py",
171
+ "app/src/view/__init__.py",
172
+ "app/src/view/main_window.py",
173
+ "app/src/view/file_select_widget.py",
174
+ "docs/user_guide.md",
175
+ "docs/arguments.md",
176
+ "docs/index.md",
177
+ "docs/images/pydmconverter.png",
178
+ "docs/reference/widgets_helpers.md",
179
+ "docs/reference/custom_types.md",
180
+ "docs/reference/widgets.md",
181
+ "docs/reference/pydm-converter-tool.md",
182
+ "docs/reference/index.md",
183
+ "docs/reference/edm/parser.md",
184
+ "docs/reference/edm/converter_helpers.md",
185
+ "docs/reference/edm/parser_helpers.md",
186
+ "docs/reference/edm/menumux.md",
187
+ "docs/reference/edm/converter.md"
172
188
  ]
173
189
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "1.0.6",
3
+ "distance": 0,
4
+ "node": "g019ee4e93a218c374536cefb02b823c824565ee4",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-07-22"
8
+ }
@@ -41,7 +41,7 @@ def run(
41
41
  out_format="json",
42
42
  ):
43
43
  if target == "react":
44
- run_react(input_file, output_file, override)
44
+ run_react(input_file, output_file, override, site=site, calc_list=calc_list)
45
45
  return
46
46
 
47
47
  input_path: Path = Path(input_file)
@@ -75,18 +75,20 @@ def run(
75
75
  print(f"Failed files: {', '.join(map(lambda path: str(path), files_failed))}")
76
76
 
77
77
 
78
- def run_react(input_file, output_file, override) -> None:
78
+ def run_react(input_file, output_file, override, site=None, calc_list=None) -> None:
79
79
  """Convert .edl/.ui to Canopy Screen IR JSON (the --target react path)."""
80
80
  from pydmconverter import react
81
81
 
82
82
  input_path = Path(input_file)
83
83
  output_path = Path(output_file)
84
84
  if input_path.is_file():
85
- out = react.convert_file(input_path, output_path, override=override)
85
+ out = react.convert_file(input_path, output_path, override=override, calc_list_path=calc_list, site=site)
86
86
  print(f"Converted {input_path} -> {out}")
87
87
  else:
88
88
  output_path.mkdir(parents=True, exist_ok=True)
89
- found, failed = react.convert_folder(input_path, output_path, override=override)
89
+ found, failed = react.convert_folder(
90
+ input_path, output_path, override=override, calc_list_path=calc_list, site=site
91
+ )
90
92
  if found == 0:
91
93
  print(f"No {' or '.join(react.SUPPORTED_SUFFIXES)} files found in {input_path}")
92
94
  else:
@@ -29,11 +29,14 @@ EDM_TO_QT_CLASS: dict[str, str] = {
29
29
  "activemotifsliderclass": "PyDMSlider",
30
30
  "activesliderclass": "PyDMSlider",
31
31
  "activetriumfsliderclass": "PyDMSlider",
32
- "activechoicebuttonclass": "PyDMEnumComboBox",
32
+ # EDM choice button IS a radio set: every state visible, current one lit
33
+ # (a dropdown hides the alternatives and, closed, showed only the ordinal).
34
+ "activechoicebuttonclass": "PyDMEnumButton",
33
35
  "activepipclass": "PyDMEmbeddedDisplay",
34
36
  # byte indicator / related display
35
37
  "byteclass": "PyDMByteIndicator",
36
38
  "relateddisplayclass": "PyDMRelatedDisplayButton",
39
+ "xygraphclass": "PyDMWaveformPlot",
37
40
  # graphics
38
41
  "activerectangleclass": "PyDMDrawingRectangle",
39
42
  "activecircleclass": "PyDMDrawingEllipse",
@@ -58,20 +61,24 @@ EDM_TO_QT_CLASS: dict[str, str] = {
58
61
  # menuMuxClass deliberately absent: macro-muxing needs a design; stays unknown-widget.
59
62
  }
60
63
 
61
- # EDM attributes that name a PV channel.
62
- EDM_CHANNEL_ATTRS = ("controlPv", "indicatorPv", "readPv", "alarmPv", "pv", "filePv", "nullPv", "ctrl1Pv")
64
+ # EDM attributes that name a data-PV channel, in PRIMARY-channel priority order.
65
+ # When an object carries several (EDM buttons pair controlPv with indicatorPv),
66
+ # controlPv wins: it is the write/primary channel; readPv/indicatorPv are
67
+ # readbacks; the rest only ever appear alone. The adapter picks primary +
68
+ # readback explicitly (ir_adapter._apply_channel_attrs) — funneling them all to
69
+ # the single "channel" prop kept only the last attr parsed and re-pointed
70
+ # widgets at the wrong PV.
71
+ EDM_PRIMARY_CHANNEL_ORDER = ("controlPv", "readPv", "indicatorPv", "pv", "filePv", "nullPv", "ctrl1Pv")
72
+ # Readback preference when a second data channel is present.
73
+ EDM_READBACK_CHANNEL_ORDER = ("indicatorPv", "readPv")
74
+ # alarmPv is deliberately NOT a data channel: it names the alarm-severity source
75
+ # for alarm-color rules (ir_adapter._alarm_rules) and must never steal the
76
+ # widget's channel (nor make a static label "live" — see has_pv).
77
+ EDM_CHANNEL_ATTRS = EDM_PRIMARY_CHANNEL_ORDER + ("alarmPv",)
63
78
 
64
79
  # EDM attribute name -> Qt prop name (the key Beaver's qtPropMap consumes).
80
+ # Channel attrs are absent on purpose: the adapter routes them itself.
65
81
  EDM_TO_QT_PROP: dict[str, str] = {
66
- # channels (all funnel to "channel"; Beaver maps channel -> pv via stripProtocol)
67
- "controlPv": "channel",
68
- "indicatorPv": "channel",
69
- "readPv": "channel",
70
- "alarmPv": "channel",
71
- "pv": "channel",
72
- "filePv": "channel",
73
- "nullPv": "channel",
74
- "ctrl1Pv": "channel", # mmvClass
75
82
  # text / labels (Beaver maps "text" -> text/label per widget)
76
83
  "value": "text",
77
84
  "label": "text",
@@ -85,9 +92,19 @@ EDM_TO_QT_PROP: dict[str, str] = {
85
92
  "fgAlarm": "alarmSensitiveContent",
86
93
  "alarmSensitiveContent": "alarmSensitiveContent",
87
94
  "alarmSensitiveBorder": "alarmSensitiveBorder",
88
- # button values
95
+ # button values / state labels / behavior
89
96
  "pressValue": "pressValue",
90
97
  "releaseValue": "releaseValue",
98
+ "onLabel": "onLabel",
99
+ "offLabel": "offLabel",
100
+ "buttonType": "buttonType",
101
+ # state colors (buttons and byte indicators share the attr names)
102
+ "onColor": "onColor",
103
+ "offColor": "offColor",
104
+ # typography: EDM font strings ("helvetica-bold-r-12.0") -> pixel size.
105
+ # Without this every label rendered at the theme default and overflowed
106
+ # its EDM-sized box (ellipsis, or silently clipped digits).
107
+ "font": "fontSize",
91
108
  # slider
92
109
  "scaleMin": "userMinimum",
93
110
  "scaleMax": "userMaximum",
@@ -126,8 +143,13 @@ EDM_TO_QT_PROP: dict[str, str] = {
126
143
 
127
144
 
128
145
  def has_pv(properties: dict[str, Any]) -> bool:
129
- """True if the EDM object carries any PV channel attribute."""
130
- return any(attr in properties for attr in EDM_CHANNEL_ATTRS)
146
+ """True if the EDM object carries a DATA channel attribute.
147
+
148
+ alarmPv does not count: it only feeds alarm-color rules, so e.g. a static
149
+ label with an alarmPv stays a static label (previously it converted to a
150
+ live pv-label bound to the alarm PV and displayed that PV's value).
151
+ """
152
+ return any(attr in properties for attr in EDM_PRIMARY_CHANNEL_ORDER)
131
153
 
132
154
 
133
155
  def resolve_qt_class(name_lower: str, properties: dict[str, Any]) -> str | None:
@@ -136,7 +158,13 @@ def resolve_qt_class(name_lower: str, properties: dict[str, Any]) -> str | None:
136
158
  A static ``activeXTextClass`` (no PV) is a label with fixed text, so it maps to
137
159
  ``QLabel`` (-> ``text-label``, which has a ``text`` prop). With a PV it is a live
138
160
  value display, so it maps to ``PyDMLabel`` (-> ``pv-label``).
161
+
162
+ A closed or filled ``activeLineClass`` is a polygon, not a polyline — the
163
+ polyline widget has no fill, so EDM's filled shapes (triangles, flow arrows)
164
+ rendered as empty outlines.
139
165
  """
140
166
  if name_lower == "activextextclass" and not has_pv(properties):
141
167
  return "QLabel"
168
+ if name_lower == "activelineclass" and (properties.get("fill") or properties.get("closePolygon")):
169
+ return "PyDMDrawingIrregularPolygon"
142
170
  return EDM_TO_QT_CLASS.get(name_lower)