pymodaq 4.0.5__tar.gz → 4.0.7__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 pymodaq might be problematic. Click here for more details.

Files changed (416) hide show
  1. {pymodaq-4.0.5 → pymodaq-4.0.7}/PKG-INFO +1 -1
  2. {pymodaq-4.0.5 → pymodaq-4.0.7}/pyproject.toml +1 -1
  3. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/daq_move.py +20 -4
  4. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/daq_move_ui.py +5 -0
  5. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/daq_viewer.py +23 -6
  6. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/daq_viewer_ui.py +1 -1
  7. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/move_utility_classes.py +103 -126
  8. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/utils.py +9 -0
  9. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/viewer_utility_classes.py +1 -0
  10. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/dashboard.py +24 -9
  11. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/custom_app.py +19 -29
  12. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/custom_viewer.py +13 -10
  13. pymodaq-4.0.7/src/pymodaq/extensions/utils.py +53 -0
  14. pymodaq-4.0.7/src/pymodaq/resources/VERSION +1 -0
  15. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/config.py +21 -3
  16. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/daq_utils.py +14 -12
  17. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/ioxml.py +12 -12
  18. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/list.py +1 -0
  19. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/utils.py +9 -4
  20. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewerND.py +8 -2
  21. pymodaq-4.0.5/src/pymodaq/extensions/utils.py +0 -37
  22. pymodaq-4.0.5/src/pymodaq/resources/VERSION +0 -1
  23. {pymodaq-4.0.5 → pymodaq-4.0.7}/.gitignore +0 -0
  24. {pymodaq-4.0.5 → pymodaq-4.0.7}/LICENSE +0 -0
  25. {pymodaq-4.0.5 → pymodaq-4.0.7}/README.rst +0 -0
  26. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/__init__.py +0 -0
  27. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/__init__.py +0 -0
  28. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/__init__.py +0 -0
  29. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/control_modules/mocks.py +0 -0
  30. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/daq_utils.py +0 -0
  31. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.aliases +0 -0
  32. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvlps +0 -0
  33. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvproj +0 -0
  34. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.vi +0 -0
  35. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_1Dgaussian.vi +0 -0
  36. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_2Dgaussian.vi +0 -0
  37. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_cmd.vi +0 -0
  38. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_float.vi +0 -0
  39. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_int.vi +0 -0
  40. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_data.vi +0 -0
  41. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_int.vi +0 -0
  42. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_scalar.vi +0 -0
  43. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_string.vi +0 -0
  44. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/client_state.ctl +0 -0
  45. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/cmd_types.ctl +0 -0
  46. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/__init__.py +0 -0
  47. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/function_plotter.py +0 -0
  48. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/nonlinearscanner.py +0 -0
  49. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/parameter_ex.py +0 -0
  50. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/examples/preset_MockCamera.xml +0 -0
  51. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/__init__.py +0 -0
  52. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/console.py +0 -0
  53. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/daq_logger.py +0 -0
  54. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/daq_scan.py +0 -0
  55. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/daq_scan_ui.py +0 -0
  56. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/h5browser.py +0 -0
  57. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/pid/__init__.py +0 -0
  58. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/pid/daq_move_PID.py +0 -0
  59. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/pid/pid_controller.py +0 -0
  60. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/extensions/pid/utils.py +0 -0
  61. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/icon.ico +0 -0
  62. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/__init__.py +0 -0
  63. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_analysis/__init__.py +0 -0
  64. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_analysis/daq_analysis_main.py +0 -0
  65. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/__init__.py +0 -0
  66. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py +0 -0
  67. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui +0 -0
  68. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_main.py +0 -0
  69. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat +0 -0
  70. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/load_and_plot.py +0 -0
  71. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/post_treatment/process_to_scalar.py +0 -0
  72. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
  73. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
  74. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
  75. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
  76. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
  77. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
  78. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
  79. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
  80. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
  81. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
  82. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
  83. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
  84. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
  85. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
  86. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
  87. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
  88. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
  89. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
  90. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
  91. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
  92. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
  93. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
  94. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
  95. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
  96. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
  97. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
  98. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
  99. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
  100. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
  101. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
  102. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
  103. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
  104. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
  105. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
  106. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
  107. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
  108. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
  109. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
  110. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
  111. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
  112. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
  113. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
  114. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
  115. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
  116. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
  117. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
  118. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
  119. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
  120. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
  121. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
  122. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
  123. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
  124. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
  125. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
  126. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
  127. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
  128. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
  129. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
  130. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
  131. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
  132. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
  133. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
  134. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
  135. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
  136. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
  137. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
  138. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
  139. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
  140. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
  141. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
  142. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
  143. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
  144. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
  145. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
  146. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
  147. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
  148. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
  149. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
  150. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
  151. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
  152. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
  153. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
  154. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
  155. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
  156. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
  157. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
  158. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
  159. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
  160. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
  161. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
  162. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
  163. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
  164. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
  165. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
  166. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
  167. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
  168. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
  169. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
  170. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
  171. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
  172. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
  173. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
  174. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
  175. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
  176. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
  177. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
  178. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
  179. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
  180. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
  181. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
  182. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
  183. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
  184. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
  185. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
  186. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
  187. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
  188. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
  189. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
  190. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
  191. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
  192. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
  193. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
  194. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
  195. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
  196. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
  197. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
  198. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
  199. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
  200. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
  201. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
  202. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
  203. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
  204. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
  205. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
  206. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
  207. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
  208. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
  209. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
  210. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
  211. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
  212. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
  213. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
  214. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
  215. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
  216. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
  217. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
  218. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
  219. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
  220. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
  221. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
  222. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
  223. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
  224. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
  225. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
  226. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
  227. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
  228. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
  229. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
  230. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
  231. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
  232. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
  233. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
  234. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
  235. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
  236. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
  237. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
  238. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
  239. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
  240. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
  241. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
  242. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
  243. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
  244. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
  245. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
  246. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
  247. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
  248. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
  249. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
  250. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
  251. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
  252. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
  253. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
  254. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
  255. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
  256. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
  257. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
  258. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
  259. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
  260. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
  261. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
  262. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
  263. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
  264. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
  265. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
  266. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
  267. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
  268. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
  269. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
  270. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
  271. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
  272. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
  273. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
  274. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
  275. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
  276. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
  277. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
  278. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
  279. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
  280. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
  281. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
  282. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
  283. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
  284. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
  285. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
  286. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
  287. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
  288. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
  289. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
  290. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
  291. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
  292. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
  293. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
  294. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
  295. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
  296. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
  297. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
  298. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -0
  299. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -0
  300. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -0
  301. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/__init__.py +0 -0
  302. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -0
  303. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/__init__.py +0 -0
  304. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/config_template.toml +0 -0
  305. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/preset_default.xml +0 -0
  306. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/resources/triangulation_data.npy +0 -0
  307. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/splash.png +0 -0
  308. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/__init__.py +0 -0
  309. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/abstract/__init__.py +0 -0
  310. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/abstract/logger.py +0 -0
  311. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/array_manipulation.py +0 -0
  312. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/calibration_camera.py +0 -0
  313. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/chrono_timer.py +0 -0
  314. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/conftests.py +0 -0
  315. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/data.py +0 -0
  316. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/db/__init__.py +0 -0
  317. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/db/db_logger/__init__.py +0 -0
  318. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/db/db_logger/db_logger.py +0 -0
  319. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/db/db_logger/db_logger_models.py +0 -0
  320. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/enums.py +0 -0
  321. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/exceptions.py +0 -0
  322. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/factory.py +0 -0
  323. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/__init__.py +0 -0
  324. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/custom_app.py +0 -0
  325. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/dock.py +0 -0
  326. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/file_io.py +0 -0
  327. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/layout.py +0 -0
  328. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/list_picker.py +0 -0
  329. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/utils.py +0 -0
  330. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/__init__.py +0 -0
  331. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/label.py +0 -0
  332. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/lcd.py +0 -0
  333. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/push.py +0 -0
  334. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/qled.py +0 -0
  335. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/spinbox.py +0 -0
  336. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/table.py +0 -0
  337. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -0
  338. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/__init__.py +0 -0
  339. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/backends.py +0 -0
  340. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/browsing.py +0 -0
  341. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/data_saving.py +0 -0
  342. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporter.py +0 -0
  343. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporters/__init__.py +0 -0
  344. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporters/base.py +0 -0
  345. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporters/flimj.py +0 -0
  346. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporters/hyperspy.py +0 -0
  347. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/h5logging.py +0 -0
  348. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/module_saving.py +0 -0
  349. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/saving.py +0 -0
  350. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/utils.py +0 -0
  351. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/logger.py +0 -0
  352. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/__init__.py +0 -0
  353. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/action_manager.py +0 -0
  354. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/batchscan_manager.py +0 -0
  355. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/modules_manager.py +0 -0
  356. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/overshoot_manager.py +0 -0
  357. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/parameter_manager.py +0 -0
  358. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/preset_manager.py +0 -0
  359. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/preset_manager_utils.py +0 -0
  360. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/remote_manager.py +0 -0
  361. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/managers/roi_manager.py +0 -0
  362. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/math_utils.py +0 -0
  363. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/messenger.py +0 -0
  364. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/__init__.py +0 -0
  365. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -0
  366. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -0
  367. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -0
  368. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -0
  369. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +0 -0
  370. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -0
  371. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -0
  372. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -0
  373. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -0
  374. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -0
  375. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -0
  376. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -0
  377. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/__init__.py +0 -0
  378. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/__init__.py +0 -0
  379. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer.py +0 -0
  380. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -0
  381. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -0
  382. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -0
  383. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -0
  384. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -0
  385. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/gant_chart.py +0 -0
  386. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/image_viewer.py +0 -0
  387. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/items/__init__.py +0 -0
  388. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/items/axis_scaled.py +0 -0
  389. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/items/crosshair.py +0 -0
  390. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/items/image.py +0 -0
  391. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/navigator.py +0 -0
  392. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/scan_selector.py +0 -0
  393. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/__init__.py +0 -0
  394. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/axes_viewer.py +0 -0
  395. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/filter.py +0 -0
  396. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/lineout.py +0 -0
  397. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/plot_utils.py +0 -0
  398. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/signalND.py +0 -0
  399. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/widgets.py +0 -0
  400. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/qvariant.py +0 -0
  401. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/__init__.py +0 -0
  402. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scan_factory.py +0 -0
  403. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanner.py +0 -0
  404. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/_1d_scanners.py +0 -0
  405. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/_2d_scanners.py +0 -0
  406. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/__init__.py +0 -0
  407. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/sequential.py +0 -0
  408. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/tabular.py +0 -0
  409. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/utils.py +0 -0
  410. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/slicing.py +0 -0
  411. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/svg/__init__.py +0 -0
  412. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/svg/svg_renderer.py +0 -0
  413. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/svg/svg_view.py +0 -0
  414. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/svg/svg_viewer2D.py +0 -0
  415. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/tcp_server_client.py +0 -0
  416. {pymodaq-4.0.5 → pymodaq-4.0.7}/src/pymodaq/utils/units.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pymodaq
3
- Version: 4.0.5
3
+ Version: 4.0.7
4
4
  Summary: Modular Data Acquisition with Python
5
5
  Project-URL: Homepage, http://pymodaq.cnrs.fr
6
6
  Project-URL: Source, https://github.com/PyMoDAQ/PyMoDAQ
@@ -50,7 +50,7 @@ dependencies = [
50
50
  "simple_pid",
51
51
  "toml",
52
52
  "qtconsole",
53
- "tables"
53
+ "tables",
54
54
  ]
55
55
 
56
56
  [project.scripts]
@@ -7,6 +7,8 @@ Created the 29/07/2022
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
+ from importlib import import_module
11
+ from numbers import Number
10
12
  import sys
11
13
  from typing import List, Tuple, Union
12
14
  import numpy as np
@@ -143,6 +145,7 @@ class DAQ_Move(ParameterManager, ControlModule):
143
145
  * show_log
144
146
  * actuator_changed
145
147
  * rel_value
148
+ * show_config
146
149
  """
147
150
  if cmd.command == 'init':
148
151
  self.init_hardware(cmd.attribute[0])
@@ -162,6 +165,8 @@ class DAQ_Move(ParameterManager, ControlModule):
162
165
  self.move_rel(cmd.attribute)
163
166
  elif cmd.command == 'show_log':
164
167
  self.show_log()
168
+ elif cmd.command == 'show_config':
169
+ self.show_config(config)
165
170
  elif cmd.command == 'actuator_changed':
166
171
  self.actuator = cmd.attribute
167
172
  elif cmd.command == 'rel_value':
@@ -251,7 +256,7 @@ class DAQ_Move(ParameterManager, ControlModule):
251
256
  """
252
257
  try:
253
258
  self._send_to_tcpip = send_to_tcpip
254
- if not value == self._current_value:
259
+ if np.all(value != self._current_value): # in case value is a ndarray (very specific cases...)
255
260
  if self.ui is not None:
256
261
  self.ui.move_done = False
257
262
  self._move_done_bool = False
@@ -362,7 +367,7 @@ class DAQ_Move(ParameterManager, ControlModule):
362
367
  self._hardware_thread.hardware = hardware
363
368
  self._hardware_thread.start()
364
369
  self.command_hardware.emit(
365
- ThreadCommand(command="ini_stage", attribute=[self.settings.child(('move_settings')).saveState(),
370
+ ThreadCommand(command="ini_stage", attribute=[self.settings.child('move_settings').saveState(),
366
371
  self.controller]))
367
372
  except Exception as e:
368
373
  self.logger.exception(str(e))
@@ -394,6 +399,9 @@ class DAQ_Move(ParameterManager, ControlModule):
394
399
  elif param.name() == 'refresh_timeout':
395
400
  self._refresh_timer.setInterval(param.value())
396
401
 
402
+ elif param.name() == 'plugin_config':
403
+ self.show_config(self.plugin_config)
404
+
397
405
  path = self.settings.childPath(param)
398
406
  if path is not None:
399
407
  if 'main_settings' not in path:
@@ -543,12 +551,19 @@ class DAQ_Move(ParameterManager, ControlModule):
543
551
  def actuator(self, act_type):
544
552
  if act_type in ACTUATOR_TYPES:
545
553
  self._actuator_type = act_type
554
+ self.update_plugin_config()
546
555
  if self.ui is not None:
547
556
  self.ui.actuator = act_type
548
557
  self.update_settings()
549
558
  else:
550
559
  raise ActuatorError(f'{act_type} is an invalid actuator, should be within {ACTUATOR_TYPES}')
551
560
 
561
+ def update_plugin_config(self):
562
+ parent_module = utils.find_dict_in_list_from_key_val(DAQ_Move_Actuators, 'name', self.actuator)
563
+ mod = import_module(parent_module['module'].__package__.split('.')[0])
564
+ if hasattr(mod, 'config'):
565
+ self.plugin_config = mod.config
566
+
552
567
  @property
553
568
  def units(self):
554
569
  return self.settings['move_settings', 'units']
@@ -734,8 +749,9 @@ class DAQ_Move_Hardware(QObject):
734
749
  --------
735
750
  move_Abs
736
751
  """
737
- position = float(position) # because it may be a numpy float and could cause issues
738
- # see https://github.com/pythonnet/pythonnet/issues/1833
752
+ if isinstance(position, Number):
753
+ position = float(position) # because it may be a numpy float and could cause issues
754
+ # see https://github.com/pythonnet/pythonnet/issues/1833
739
755
  self._target_value = position
740
756
  self.hardware.move_is_done = False
741
757
  self.hardware.ispolling = polling
@@ -39,6 +39,8 @@ class DAQ_Move_UI(ControlModuleUI):
39
39
  * show_log
40
40
  * actuator_changed
41
41
  * rel_value
42
+ * show_config
43
+ * show_plugin_config
42
44
 
43
45
  Methods
44
46
  -------
@@ -237,6 +239,8 @@ class DAQ_Move_UI(ControlModuleUI):
237
239
  toolbar=self.toolbar)
238
240
  self.add_action('show_settings', 'Show Settings', 'Settings', "Show Settings", checkable=True,
239
241
  toolbar=self.toolbar)
242
+ self.add_action('show_config', 'Show Config', 'tree', "Show Plugin Config", checkable=False,
243
+ toolbar=self.toolbar)
240
244
  self.add_action('refresh_value', 'Refresh', 'Refresh2', "Refresh Value", checkable=True,
241
245
  toolbar=self.toolbar)
242
246
  self.add_action('stop', 'Stop', 'stop', "Stop Motion", checkable=False,
@@ -256,6 +260,7 @@ class DAQ_Move_UI(ControlModuleUI):
256
260
  self.connect_action('move_abs_2', lambda: self.emit_move_abs(self.abs_value_sb_2))
257
261
  self.connect_action('log', lambda: self.command_sig.emit(ThreadCommand('show_log', )))
258
262
  self.connect_action('stop', lambda: self.command_sig.emit(ThreadCommand('stop', )))
263
+ self.connect_action('show_config', lambda : self.command_sig.emit(ThreadCommand('show_config', )))
259
264
 
260
265
  self.move_abs_pb.clicked.connect(lambda: self.emit_move_abs(self.abs_value_sb_bis))
261
266
 
@@ -5,7 +5,7 @@ Created on Wed Jan 10 16:54:14 2018
5
5
  @author: Weber Sébastien
6
6
  """
7
7
  from __future__ import annotations
8
-
8
+ from importlib import import_module
9
9
  from collections import OrderedDict
10
10
  import copy
11
11
  import os
@@ -250,6 +250,12 @@ class DAQ_Viewer(ParameterManager, ControlModule):
250
250
  if self.ui is not None:
251
251
  return self.ui.viewer_docks
252
252
 
253
+ @property
254
+ def viewers_docks(self) -> List[Dock]:
255
+ """list of Viewer Docks from the UI, for back compatibility"""
256
+ deprecation_msg('viewers_docks is a deprecated property use viewer_docks instead')
257
+ return self.viewer_docks
258
+
253
259
  def daq_type_changed_from_ui(self, daq_type: DAQTypesEnum):
254
260
  """ Apply changes from the selection of a different DAQTypesEnum in the UI
255
261
 
@@ -289,6 +295,7 @@ class DAQ_Viewer(ParameterManager, ControlModule):
289
295
 
290
296
  def detector_changed_from_ui(self, detector: str):
291
297
  self._detector = detector
298
+ self.update_plugin_config()
292
299
  self._set_setting_tree()
293
300
 
294
301
  @property
@@ -301,10 +308,17 @@ class DAQ_Viewer(ParameterManager, ControlModule):
301
308
  if det not in self.detectors:
302
309
  raise ValueError(f'{det} is not a valid Detector: {self.detectors}')
303
310
  self._detector = det
311
+ self.update_plugin_config()
304
312
  if self.ui is not None:
305
313
  self.ui.detector = det
306
314
  self._set_setting_tree()
307
315
 
316
+ def update_plugin_config(self):
317
+ parent_module = utils.find_dict_in_list_from_key_val(DET_TYPES[self.daq_type.name], 'name', self.detector)
318
+ mod = import_module(parent_module['module'].__package__.split('.')[0])
319
+ if hasattr(mod, 'config'):
320
+ self.plugin_config = mod.config
321
+
308
322
  def detectors_changed_from_ui(self, detectors: List[str]):
309
323
  self._detectors = detectors
310
324
 
@@ -906,10 +920,13 @@ class DAQ_Viewer(ParameterManager, ControlModule):
906
920
 
907
921
  elif param.name() == 'ip_address' or param.name == 'port':
908
922
  self._command_tcpip.emit(
909
- ThreadCommand('update_connection', dict(ipaddress=self.settings.child('main_settings', 'tcpip',
910
- 'ip_address').value(),
911
- port=self.settings.child('main_settings', 'tcpip',
912
- 'port').value())))
923
+ ThreadCommand('update_connection', dict(ipaddress=self.settings['main_settings', 'tcpip',
924
+ 'ip_address'],
925
+ port=self.settings['main_settings', 'tcpip',
926
+ 'port'])))
927
+
928
+ elif param.name() == 'plugin_config':
929
+ self.show_config(self.plugin_config)
913
930
 
914
931
  if path is not None:
915
932
  if 'main_settings' not in path:
@@ -1319,7 +1336,7 @@ class DAQ_Detector(QObject):
1319
1336
  if not self.grab_state:
1320
1337
  self.detector.stop()
1321
1338
 
1322
- def single(self, Naverage=1, **kwargs):
1339
+ def single(self, Naverage=1, *args, **kwargs):
1323
1340
  """ Convenience function to grab a single set of data
1324
1341
 
1325
1342
  Parameters
@@ -206,7 +206,7 @@ class DAQ_Viewer_UI(ControlModuleUI, ViewerDispatcher):
206
206
 
207
207
  self.add_action('show_controls', 'Show Controls', 'Settings', "Show Controls to set DAQ and Detector type",
208
208
  checkable=True)
209
- self.add_action('show_settings', 'Show Settings', 'Settings', "Show Settings", checkable=True)
209
+ self.add_action('show_settings', 'Show Settings', 'tree', "Show Settings", checkable=True)
210
210
 
211
211
  self.add_action('quit', 'Quit the module', 'close2')
212
212
  self.add_action('log', 'Show Log file', 'information2')
@@ -1,22 +1,25 @@
1
+ from time import perf_counter
2
+ from typing import Union, List, Dict
3
+
4
+ from easydict import EasyDict as edict
5
+ import numpy as np
1
6
  from qtpy import QtWidgets
2
7
  from qtpy.QtCore import QObject, Slot, Signal, QTimer
3
8
 
4
-
5
- from easydict import EasyDict as edict
6
9
  import pymodaq.utils.daq_utils as utils
7
10
  import pymodaq.utils.parameter.utils as putils
8
- from pymodaq.utils.logger import set_logger, get_module_name, get_module_name
11
+ from pymodaq.utils.parameter import Parameter
12
+ from pymodaq.utils.logger import set_logger, get_module_name
9
13
  from pymodaq.utils.parameter import ioxml
10
- from pyqtgraph.parametertree import Parameter
11
- from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo
12
- from pymodaq.utils.config import Config
14
+
15
+ from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo, find_keys_from_val
16
+ from pymodaq.utils import config as configmod
13
17
  from pymodaq.utils.tcp_server_client import TCPServer, tcp_parameters
14
18
  from pymodaq.utils.messenger import deprecation_msg
15
- import numpy as np
16
- from time import perf_counter
19
+
17
20
 
18
21
  logger = set_logger(get_module_name(__file__))
19
- config = Config()
22
+ config = configmod.Config()
20
23
 
21
24
 
22
25
  def comon_parameters(epsilon=config('actuator', 'epsilon_default')):
@@ -94,6 +97,7 @@ params = [
94
97
  {'title': 'Main Settings:', 'name': 'main_settings', 'type': 'group', 'children': [
95
98
  {'title': 'Actuator type:', 'name': 'move_type', 'type': 'str', 'value': '', 'readonly': True},
96
99
  {'title': 'Actuator name:', 'name': 'module_name', 'type': 'str', 'value': '', 'readonly': True},
100
+ {'title': 'Plugin Config:', 'name': 'plugin_config', 'type': 'bool_push', 'label': 'Show Config', },
97
101
  {'title': 'Controller ID:', 'name': 'controller_ID', 'type': 'int', 'value': 0, 'default': 0},
98
102
  {'title': 'Refresh value (ms):', 'name': 'refresh_timeout', 'type': 'int',
99
103
  'value': config('actuator', 'refresh_timeout_ms')},
@@ -138,45 +142,43 @@ def main(plugin_file, init=True, title='test'):
138
142
 
139
143
 
140
144
  class DAQ_Move_base(QObject):
141
- """ The base class to be herited by all actuator modules
145
+ """ The base class to be inherited by all actuator modules
142
146
 
143
147
  This base class implements all necessary parameters and methods for the plugin to communicate with its parent (the
144
148
  DAQ_Move module)
145
149
 
146
150
  Parameters
147
151
  ----------
148
- parent : DAQ_Move_stage instance (see daq_viewer_main module)
149
- params_state : Parameter instance (pyqtgraph) from which the module will get the initial settings (as defined in the managers)
150
-
151
-
152
- :ivar move_done_signal: Signal signal represented by a float. Is emitted each time the hardware reached the target
153
- position within the epsilon precision (see comon_parameters variable)
154
-
155
- :ivar controller: the object representing the hardware in the plugin. Used to access hardware functionality
156
-
157
- :ivar status: easydict instance to set information (str), controller object, stage object (if required) and initialized
158
- state (bool) to return to parent after initialization
159
-
160
- :ivar settings: Parameter instance representing the hardware settings defined from the params attribute. Modifications
161
- on the GUI settings will be transferred to this attribute. It stores at all times the current state of the hardware/plugin
162
-
163
- :ivar params: class level attribute. List of dict used to create a Parameter object. Its definition on the class level enable
164
- the automatic update of the GUI settings when changing plugins (even in managers mode creation). To be populated
165
- on the plugin level as the base class does't represents a real hardware
166
-
167
- :ivar is_multiaxes: class level attribute (bool). Defines if the plugin controller controls multiple axes. If True, one has to define
168
- a Master instance of this plugin and slave instances of this plugin (all sharing the same controller_ID Parameter)
169
-
170
- :ivar current_value: (float) stores the current position after each call to the get_actuator_value in the child module
171
-
172
- :ivar target_value: (float) stores the target position the controller should reach within epsilon
173
-
152
+ parent : DAQ_Move_Hardware
153
+ params_state : Parameter
154
+ pyqtgraph Parameter instance from which the module will get the initial settings (as defined in the preset)
155
+ Attributes
156
+ ----------
157
+ move_done_signal: Signal
158
+ signal represented by a float. Is emitted each time the hardware reached the target position within the epsilon
159
+ precision (see comon_parameters variable)
160
+ controller: object
161
+ the object representing the hardware in the plugin. Used to access hardware functionality
162
+ settings: Parameter
163
+ instance representing the hardware settings defined from the params attribute. Modifications on the GUI settings
164
+ will be transferred to this attribute. It stores at all times the current state of the hardware/plugin settings
165
+ params: List of dict used to create a Parameter object.
166
+ Its definition on the class level enable the automatic update of the GUI settings when changing plugins
167
+ (even in managers mode creation). To be populated on the plugin level as the base class does't represents a
168
+ real hardware
169
+ is_multiaxes: bool
170
+ class level attribute. Defines if the plugin controller controls multiple axes. If True, one has to define
171
+ a Master instance of this plugin and slave instances of this plugin (all sharing the same controller_ID
172
+ parameter)
173
+ current_value: float
174
+ stores the current position after each call to the get_actuator_value in the plugin
175
+ target_value: float
176
+ stores the target position the controller should reach within epsilon
174
177
  """
175
178
 
176
179
  move_done_signal = Signal(float)
177
180
  is_multiaxes = False
178
181
  stage_names = []
179
- axes_name = []
180
182
  params = []
181
183
  _controller_units = ''
182
184
  _epsilon = 1
@@ -210,7 +212,40 @@ class DAQ_Move_base(QObject):
210
212
 
211
213
  self.ini_attributes()
212
214
 
215
+ @property
216
+ def axis_name(self) -> str:
217
+ """Get/Set the current axis using its string identifier"""
218
+ limits = self.settings.child('multiaxes', 'axis').opts['limits']
219
+ if isinstance(limits, list):
220
+ return self.settings.child('multiaxes', 'axis').value()
221
+ elif isinstance(limits, dict):
222
+ return find_keys_from_val(limits, val=self.settings.child('multiaxes', 'axis').value())[0]
223
+
224
+ @axis_name.setter
225
+ def axis_name(self, name: str):
226
+ limits = self.settings.child('multiaxes', 'axis').opts['limits']
227
+ if name in limits:
228
+ if isinstance(limits, list):
229
+ self.settings.child('multiaxes', 'axis').setValue(name)
230
+ elif isinstance(limits, dict):
231
+ self.settings.child('multiaxes', 'axis').setValue(limits[name])
232
+
233
+ @property
234
+ def axis_names(self) -> Union[List, Dict]:
235
+ """ Get/Set the names of all axes controlled by this instrument plugin
236
+
237
+ Returns
238
+ -------
239
+ List of string or dictionary mapping names to integers
240
+ """
241
+ return self.settings.child('multiaxes', 'axis').opts['limits']
242
+
243
+ @axis_names.setter
244
+ def axis_names(self, names: Union[List, Dict]):
245
+ self.settings.child('multiaxes', 'axis').opts['limits'] = names
246
+
213
247
  def ini_attributes(self):
248
+ """ To be subclassed, in order to init specific attributes needed by the real implementation"""
214
249
  self.controller = None
215
250
 
216
251
  def ini_stage_init(self, old_controller=None, new_controller=None):
@@ -262,6 +297,7 @@ class DAQ_Move_base(QObject):
262
297
 
263
298
  @property
264
299
  def controller_units(self):
300
+ """ Get/Set the units of this plugin"""
265
301
  return self._controller_units
266
302
 
267
303
  @controller_units.setter
@@ -274,22 +310,17 @@ class DAQ_Move_base(QObject):
274
310
 
275
311
  @property
276
312
  def ispolling(self):
313
+ """ Get/Set the polling status"""
277
314
  return self._ispolling
278
315
 
279
316
  @ispolling.setter
280
317
  def ispolling(self, polling=True):
281
318
  self._ispolling = polling
282
319
 
283
- def check_bound(self, position):
284
- """
285
-
286
- Parameters
287
- ----------
288
- position
289
-
290
- Returns
291
- -------
320
+ def check_bound(self, position: float) -> float:
321
+ """ Check if the current position is within the software bounds
292
322
 
323
+ Return the new position eventually coerced within the bounds
293
324
  """
294
325
  if self.settings.child('bounds', 'is_bounds').value():
295
326
  if position > self.settings.child('bounds', 'max_bound').value():
@@ -329,19 +360,7 @@ class DAQ_Move_base(QObject):
329
360
  raise NotImplementedError
330
361
 
331
362
  def emit_status(self, status: ThreadCommand):
332
- """
333
- | Emit the statut signal from the given status parameter.
334
- |
335
- | The signal is sended to the gui to update the user interface.
336
-
337
- =============== ===================== ========================================================================================================================================
338
- **Parameters** **Type** **Description**
339
- *status* ordered dictionnary dictionnary containing keys:
340
- * *info* : string displaying various info
341
- * *controller*: instance of the controller object in order to control other axes without the need to init the same controller twice
342
- * *stage*: instance of the stage (axis or whatever) object
343
- * *initialized*: boolean indicating if initialization has been done corretly
344
- =============== ===================== ========================================================================================================================================
363
+ """ Emit the status_sig signal with the given status ThreadCommand back to the main GUI.
345
364
  """
346
365
  if self.parent is not None:
347
366
  self.parent.status_sig.emit(status)
@@ -349,37 +368,19 @@ class DAQ_Move_base(QObject):
349
368
  else:
350
369
  print(status)
351
370
 
352
- def emit_value(self, pos):
371
+ def emit_value(self, pos: float):
372
+ """Convenience method to emit the current actuator value back to the UI"""
373
+
353
374
  self.emit_status(ThreadCommand('get_actuator_value', [pos]))
354
375
 
355
- def commit_settings(self, param):
376
+ def commit_settings(self, param: Parameter):
356
377
  """
357
378
  to subclass to transfer parameters to hardware
358
379
  """
359
- pass
360
380
 
361
381
  def commit_common_settings(self, param):
362
382
  pass
363
383
 
364
- def get_position_with_scaling(self, pos):
365
- """
366
- Get the current position from the hardware with scaling conversion.
367
-
368
- =============== ========= =====================
369
- **Parameters** **Type** **Description**
370
- *pos* float the current position
371
- =============== ========= =====================
372
-
373
- Returns
374
- =======
375
- float
376
- the computed position.
377
- """
378
- if self.settings.child('scaling', 'use_scaling').value():
379
- pos = (pos - self.settings.child('scaling', 'offset').value()) * self.settings.child('scaling',
380
- 'scaling').value()
381
- return pos
382
-
383
384
  def move_done(self, position=None): # the position argument is just there to match some signature of child classes
384
385
  """
385
386
  | Emit a move done signal transmitting the float position to hardware.
@@ -397,12 +398,11 @@ class DAQ_Move_base(QObject):
397
398
  self.move_is_done = True
398
399
 
399
400
  def poll_moving(self):
400
- """
401
- Poll the current moving. In case of timeout emit the raise timeout Thread command.
401
+ """ Poll the current moving. In case of timeout emit the raise timeout Thread command.
402
402
 
403
- See Also
404
- --------
405
- DAQ_utils.ThreadCommand, move_done
403
+ See Also
404
+ --------
405
+ DAQ_utils.ThreadCommand, move_done
406
406
  """
407
407
  if 'TCPServer' not in self.__class__.__name__:
408
408
  self.start_time = perf_counter()
@@ -437,19 +437,9 @@ class DAQ_Move_base(QObject):
437
437
  self.move_done(self.current_value)
438
438
 
439
439
  def send_param_status(self, param, changes):
440
- """
441
- | Send changes value updates to the gui to update consequently the User Interface.
442
- | The message passing is made via the Thread Command "update_settings".
440
+ """ Send changes value updates to the gui to update consequently the User Interface
443
441
 
444
- =============== =================================== ==================================================
445
- **Parameters** **Type** **Description**
446
- *param* instance of pyqtgraph parameter The parameter to be checked
447
- *changes* (parameter,change,infos)tuple list The (parameter,change,infos) list to be treated
448
- =============== =================================== ==================================================
449
-
450
- See Also
451
- ========
452
- DAQ_utils.ThreadCommand
442
+ The message passing is made via the ThreadCommand "update_settings".
453
443
  """
454
444
 
455
445
  for param, change, data in changes:
@@ -464,28 +454,24 @@ class DAQ_Move_base(QObject):
464
454
  elif change == 'parent':
465
455
  pass
466
456
 
467
- def set_position_with_scaling(self, pos):
457
+ def get_position_with_scaling(self, pos: float):
458
+ """ Get the current position from the hardware with scaling conversion.
468
459
  """
469
- Set the current position from the parameter and hardware with scaling conversion.
470
-
471
- =============== ========= ==========================
472
- **Parameters** **Type** **Description**
473
- *pos* float the position to be setted
474
- =============== ========= ==========================
460
+ if self.settings.child('scaling', 'use_scaling').value():
461
+ pos = (pos - self.settings.child('scaling', 'offset').value()) * self.settings.child('scaling',
462
+ 'scaling').value()
463
+ return pos
475
464
 
476
- Returns
477
- =======
478
- float
479
- the computed position.
465
+ def set_position_with_scaling(self, pos: float):
466
+ """ Set the current position from the parameter and hardware with scaling conversion.
480
467
  """
481
468
  if self.settings.child('scaling', 'use_scaling').value():
482
469
  pos = pos / self.settings.child('scaling', 'scaling').value() + self.settings.child('scaling',
483
470
  'offset').value()
484
471
  return pos
485
472
 
486
- def set_position_relative_with_scaling(self, pos):
487
- """
488
- Set the scaled positions in case of relative moves
473
+ def set_position_relative_with_scaling(self, pos: float):
474
+ """ Set the scaled positions in case of relative moves
489
475
  """
490
476
  if self.settings.child('scaling', 'use_scaling').value():
491
477
  pos = pos / self.settings.child('scaling', 'scaling').value()
@@ -493,17 +479,8 @@ class DAQ_Move_base(QObject):
493
479
 
494
480
  @Slot(edict)
495
481
  def update_settings(self, settings_parameter_dict): # settings_parameter_dict=edict(path=path,param=param)
496
- """
497
- Receive the settings_parameter signal from the param_tree_changed method and make hardware updates of mmodified values.
498
-
499
- ========================== =========== ==========================================================================================================
500
- **Arguments** **Type** **Description**
501
- *settings_parameter_dict* dictionnary Dictionnary with the path of the parameter in hardware structure as key and the parameter name as element
502
- ========================== =========== ==========================================================================================================
503
-
504
- See Also
505
- --------
506
- send_param_status, commit_settings
482
+ """ Receive the settings_parameter signal from the param_tree_changed method and make hardware updates of
483
+ modified values.
507
484
  """
508
485
  path = settings_parameter_dict['path']
509
486
  param = settings_parameter_dict['param']
@@ -564,9 +541,9 @@ class DAQ_Move_TCP_server(DAQ_Move_base, TCPServer):
564
541
  """
565
542
  self.client_type = "ACTUATOR"
566
543
  DAQ_Move_base.__init__(self, parent, params_state) # initialize base class with commom attribute and methods
567
- self.settings.child(('bounds')).hide()
568
- self.settings.child(('scaling')).hide()
569
- self.settings.child(('epsilon')).setValue(1)
544
+ self.settings.child('bounds').hide()
545
+ self.settings.child('scaling').hide()
546
+ self.settings.child('epsilon').setValue(1)
570
547
 
571
548
  TCPServer.__init__(self, self.client_type)
572
549
 
@@ -15,6 +15,7 @@ from pymodaq.utils.parameter import Parameter
15
15
  from pymodaq.utils.enums import BaseEnum, enum_checker
16
16
  from pymodaq.utils.plotting.data_viewers.viewer import ViewersEnum
17
17
  from pymodaq.utils.exceptions import DetectorError
18
+ from pymodaq.utils import config as configmod
18
19
 
19
20
 
20
21
  class DAQTypesEnum(BaseEnum):
@@ -114,6 +115,7 @@ class ControlModule(QObject):
114
115
  self._tcpclient_thread = None
115
116
  self._hardware_thread = None
116
117
  self.module_and_data_saver = None
118
+ self.plugin_config: configmod.Config = None
117
119
 
118
120
  def __repr__(self):
119
121
  return f'{self.__class__.__name__}: {self.title}'
@@ -135,6 +137,7 @@ class ControlModule(QObject):
135
137
  * raise_timeout:
136
138
  * show_splash: Display the splash screen with attribute as message
137
139
  * close_splash
140
+ * show_config: display the plugin configuration
138
141
  """
139
142
 
140
143
  if status.command == "Update_Status":
@@ -284,6 +287,12 @@ class ControlModule(QObject):
284
287
  import webbrowser
285
288
  webbrowser.open(self.logger.parent.handlers[0].baseFilename)
286
289
 
290
+ def show_config(self, config: Config):
291
+ """ Display in a tree the current configuration"""
292
+ if config is not None:
293
+ config_tree = configmod.TreeFromToml(config)
294
+ config_tree.show_dialog()
295
+
287
296
  def update_status(self, txt, log=True):
288
297
  """Display a message in the ui status bar and eventually log the message
289
298
 
@@ -36,6 +36,7 @@ params = [
36
36
  'readonly': True},
37
37
  {'title': 'Detector type:', 'name': 'detector_type', 'type': 'str', 'value': '', 'readonly': True},
38
38
  {'title': 'Detector Name:', 'name': 'module_name', 'type': 'str', 'value': '', 'readonly': True},
39
+ {'title': 'Plugin Config:', 'name': 'plugin_config', 'type': 'bool_push', 'label': 'Show Config', },
39
40
  {'title': 'Controller ID:', 'name': 'controller_ID', 'type': 'int', 'value': 0, 'default': 0, 'readonly': False},
40
41
  {'title': 'Show data and process:', 'name': 'show_data', 'type': 'bool', 'value': True, },
41
42
  {'title': 'Refresh time (ms):', 'name': 'refresh_time', 'type': 'float', 'value': 50., 'min': 0.},