GridCal 5.1.55__tar.gz → 5.1.56__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 (287) hide show
  1. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +2 -0
  2. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +35 -16
  3. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +19 -5
  4. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +206 -93
  5. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +15 -22
  6. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +32 -21
  7. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +15 -17
  8. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +16 -23
  9. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +1 -4
  10. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +121 -27
  11. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +30 -65
  12. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/models_dialogue.py +1 -1
  13. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/RosetaExplorer/MainWindow.py +19 -19
  14. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +64 -46
  15. GridCal-5.1.56/GridCal/Gui/RosetaExplorer/icons_rc.py +9670 -0
  16. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/__version__.py +1 -1
  17. {GridCal-5.1.55 → GridCal-5.1.56}/PKG-INFO +1 -1
  18. GridCal-5.1.55/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -9708
  19. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ExecuteGridCal.py +0 -0
  20. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  21. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  22. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  23. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  24. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  25. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  26. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Analysis/__init__.py +0 -0
  27. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Analysis/gui.py +0 -0
  28. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  29. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  30. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  31. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  32. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  33. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  34. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  35. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  36. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  37. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  38. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  39. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  40. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  41. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  42. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  43. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  44. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  45. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  46. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  47. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  48. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  49. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  50. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  51. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  52. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  53. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  54. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  55. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  56. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
  57. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  58. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  59. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  60. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
  61. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
  62. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
  63. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +0 -0
  64. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
  65. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
  66. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
  67. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  68. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  69. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  70. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  71. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  72. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  73. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  74. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  75. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  76. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  77. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  78. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  79. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  80. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  81. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  82. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  83. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  84. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
  85. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  86. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  87. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  88. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  89. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  90. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  91. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  92. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  93. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  94. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  95. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  96. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  97. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  98. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  99. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  100. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  101. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  102. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  103. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  104. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  105. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  106. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  107. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  108. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  109. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  110. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/__init__.py +0 -0
  111. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  112. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  113. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  114. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  115. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  116. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  117. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/GridGenerator/gui.py +0 -0
  118. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  119. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  120. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  121. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  122. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  123. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  124. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  125. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  126. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  127. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  128. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  129. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  130. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  131. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  132. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/GridCalMain.py +0 -0
  133. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/MainWindow.py +0 -0
  134. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  135. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  136. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  137. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  138. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  139. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  140. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  141. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  142. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  143. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  144. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  145. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  146. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  147. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  148. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  149. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  150. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  151. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
  152. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/__init__.py +0 -0
  153. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/icons_rc.py +0 -0
  154. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/object_select_window.py +0 -0
  155. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Main/update_gui_file.py +0 -0
  156. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  157. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  158. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  159. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  160. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  161. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  162. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  163. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  164. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  165. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  166. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  167. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  168. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  169. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  170. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  171. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  172. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  173. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  174. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  175. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  176. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  177. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  178. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  179. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  180. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  181. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  182. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  183. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  184. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  185. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  186. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  187. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  188. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  189. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  190. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  191. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  192. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  193. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  194. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  195. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  196. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  197. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  198. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  199. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  200. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  201. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  202. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  203. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  204. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  205. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Visualization/__init__.py +0 -0
  206. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Visualization/visualization.py +0 -0
  207. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Widgets/__init__.py +0 -0
  208. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  209. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  210. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  211. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  212. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  213. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  214. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  215. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/__init__.py +0 -0
  216. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/associations_model.py +0 -0
  217. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/console_widget.py +0 -0
  218. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/general_dialogues.py +0 -0
  219. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/gui_functions.py +0 -0
  220. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/messages.py +0 -0
  221. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/object_model.py +0 -0
  222. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/pandas_model.py +0 -0
  223. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/plot_config.py +0 -0
  224. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/profiles_model.py +0 -0
  225. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/results_model.py +0 -0
  226. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/table_view_header_wrap.py +0 -0
  227. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/themes.py +0 -0
  228. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/update_gui_all.py +0 -0
  229. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/update_gui_common.py +0 -0
  230. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Gui/wrappable_table_model.py +0 -0
  231. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/LICENSE.txt +0 -0
  232. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Session/__init__.py +0 -0
  233. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Session/export_results_driver.py +0 -0
  234. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Session/file_handler.py +0 -0
  235. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Session/server_driver.py +0 -0
  236. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Session/session.py +0 -0
  237. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/Session/synchronization_driver.py +0 -0
  238. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/__init__.py +0 -0
  239. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  240. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  241. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  242. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  243. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  244. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  245. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  246. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  247. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  248. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  249. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  250. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  251. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  252. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  253. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  254. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  255. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  256. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  257. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  258. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  259. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  260. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  261. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  262. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  263. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  264. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  265. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  266. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  267. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  268. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  269. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  270. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  271. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  272. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  273. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  274. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  275. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  276. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  277. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/__init__.py +0 -0
  278. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/data/__init__.py +0 -0
  279. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/data/cables.csv +0 -0
  280. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/data/sequence_lines.csv +0 -0
  281. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/data/transformers.csv +0 -0
  282. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/data/wires.csv +0 -0
  283. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/plugins.py +0 -0
  284. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/templates.py +0 -0
  285. {GridCal-5.1.55 → GridCal-5.1.56}/GridCal/update.py +0 -0
  286. {GridCal-5.1.55 → GridCal-5.1.56}/setup.cfg +0 -0
  287. {GridCal-5.1.55 → GridCal-5.1.56}/setup.py +0 -0
@@ -173,6 +173,7 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
173
173
  Event handler for mouse press events.
174
174
  """
175
175
  super().mousePressEvent(event)
176
+ self.parent.mousePressEvent(event)
176
177
  self.editor.disableMove = True
177
178
  self.update_position_at_the_diagram() # always update
178
179
 
@@ -184,6 +185,7 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
184
185
  Event handler for mouse release events.
185
186
  """
186
187
  super().mouseReleaseEvent(event)
188
+ self.parent.mouseReleaseEvent(event)
187
189
  self.editor.disableMove = True
188
190
 
189
191
  def hoverEnterEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
@@ -38,7 +38,6 @@ from GridCalEngine.Devices.Branches.line import Line
38
38
  from GridCalEngine.Devices.Branches.dc_line import DcLine
39
39
  from GridCalEngine.Devices.Branches.hvdc_line import HvdcLine
40
40
  from GridCalEngine.Devices.Diagrams.map_diagram import MapDiagram
41
- from GridCalEngine.Devices.types import BRANCH_TYPES
42
41
  from GridCalEngine.Devices.Fluid import FluidNode, FluidPath
43
42
  from GridCalEngine.basic_structures import Vec, CxVec, IntVec
44
43
  from GridCalEngine.Devices.Substation.substation import Substation
@@ -983,9 +982,6 @@ class GridMapWidget(BaseDiagramWidget):
983
982
  graphic_object.change_pen_width(pen_width)
984
983
 
985
984
  def colour_results(self,
986
- buses: List[Bus],
987
- branches: List[BRANCH_TYPES],
988
- hvdc_lines: List[HvdcLine],
989
985
  Sbus: CxVec,
990
986
  bus_active: IntVec,
991
987
  Sf: CxVec,
@@ -1004,6 +1000,13 @@ class GridMapWidget(BaseDiagramWidget):
1004
1000
  ma: Vec = None,
1005
1001
  theta: Vec = None,
1006
1002
  Beq: Vec = None,
1003
+ fluid_node_p2x_flow: Vec = None,
1004
+ fluid_node_current_level: Vec = None,
1005
+ fluid_node_spillage: Vec = None,
1006
+ fluid_node_flow_in: Vec = None,
1007
+ fluid_node_flow_out: Vec = None,
1008
+ fluid_path_flow: Vec = None,
1009
+ fluid_injection_flow: Vec = None,
1007
1010
  use_flow_based_width: bool = False,
1008
1011
  min_branch_width: int = 5,
1009
1012
  max_branch_width=5,
@@ -1012,9 +1015,6 @@ class GridMapWidget(BaseDiagramWidget):
1012
1015
  cmap: palettes.Colormaps = None):
1013
1016
  """
1014
1017
  Color objects based on the results passed
1015
- :param buses: list of matching bus objects
1016
- :param branches: list of Branches without HVDC
1017
- :param hvdc_lines: list of HVDC lines
1018
1018
  :param Sbus: Buses power (MVA)
1019
1019
  :param bus_active: Bus active status
1020
1020
  :param Sf: Branches power from the "from" bus (MVA)
@@ -1033,6 +1033,13 @@ class GridMapWidget(BaseDiagramWidget):
1033
1033
  :param ma: branch phase shift angle (rad)
1034
1034
  :param theta: branch tap module (p.u.)
1035
1035
  :param Beq: Branch equivanet susceptance (p.u.)
1036
+ :param fluid_node_p2x_flow: P2X flow rate (m3)
1037
+ :param fluid_node_current_level: Current level (m3)
1038
+ :param fluid_node_spillage: Spillage (m3)
1039
+ :param fluid_node_flow_in: Flow rate (m3)
1040
+ :param fluid_node_flow_out: Flow rate (m3)
1041
+ :param fluid_injection_flow: Injection rate (m3)
1042
+ :param fluid_path_flow: fluid flow (m3)
1036
1043
  :param use_flow_based_width: use branch width based on the actual flow?
1037
1044
  :param min_branch_width: Minimum branch width [px]
1038
1045
  :param max_branch_width: Maximum branch width [px]
@@ -1050,12 +1057,12 @@ class GridMapWidget(BaseDiagramWidget):
1050
1057
  # vabs = np.abs(voltages)
1051
1058
  # vang = np.angle(voltages, deg=True)
1052
1059
  # vnorm = (vabs - vmin) / vrng
1060
+ nbus = self.circuit.get_bus_number()
1053
1061
 
1054
- n = len(buses)
1055
- longitudes = np.zeros(n)
1056
- latitudes = np.zeros(n)
1062
+ longitudes = np.zeros(nbus)
1063
+ latitudes = np.zeros(nbus)
1057
1064
  nodes_dict = dict()
1058
- for i, bus in enumerate(buses):
1065
+ for i, bus in enumerate(self.circuit.buses):
1059
1066
 
1060
1067
  # try to find the diagram object of the DB object
1061
1068
  graphic_object = self.graphics_manager.query(bus)
@@ -1099,13 +1106,13 @@ class GridMapWidget(BaseDiagramWidget):
1099
1106
  arrow_scale = self.get_arrow_scale()
1100
1107
 
1101
1108
  # Try colouring the branches
1102
- if len(branches):
1109
+ if self.circuit.get_branch_number_wo_hvdc():
1103
1110
 
1104
1111
  lnorm = np.abs(loadings)
1105
1112
  lnorm[lnorm == np.inf] = 0
1106
1113
  Sfabs = np.abs(Sf)
1107
1114
  Sfnorm = Sfabs / np.max(Sfabs + 1e-20)
1108
- for i, branch in enumerate(branches):
1115
+ for i, branch in enumerate(self.circuit.get_branches_wo_hvdc_iter()):
1109
1116
 
1110
1117
  # try to find the diagram object of the DB object
1111
1118
  graphic_object: Union[MapAcLine, MapDcLine] = self.graphics_manager.query(branch)
@@ -1159,14 +1166,14 @@ class GridMapWidget(BaseDiagramWidget):
1159
1166
  pass
1160
1167
 
1161
1168
  # try colouring the HVDC lines
1162
- if len(hvdc_lines) > 0:
1169
+ if self.circuit.get_hvdc_number() > 0:
1163
1170
 
1164
1171
  lnorm = np.abs(hvdc_loading)
1165
1172
  lnorm[lnorm == np.inf] = 0
1166
1173
  Sfabs = np.abs(hvdc_Pf)
1167
1174
  Sfnorm = Sfabs / np.max(Sfabs + 1e-9)
1168
1175
 
1169
- for i, branch in enumerate(hvdc_lines):
1176
+ for i, branch in enumerate(self.circuit.hvdc_lines):
1170
1177
 
1171
1178
  # try to find the diagram object of the DB object
1172
1179
  graphic_object: MapHvdcLine = self.graphics_manager.query(branch)
@@ -1203,7 +1210,8 @@ class GridMapWidget(BaseDiagramWidget):
1203
1210
  style = Qt.PenStyle.SolidLine
1204
1211
  if use_flow_based_width:
1205
1212
  weight = int(
1206
- np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1))
1213
+ np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1)
1214
+ )
1207
1215
  else:
1208
1216
  weight = self.get_branch_width()
1209
1217
 
@@ -1223,6 +1231,17 @@ class GridMapWidget(BaseDiagramWidget):
1223
1231
  graphic_object.set_colour(color=color, style=style, tool_tip=tooltip)
1224
1232
  graphic_object.set_width_scale(branch_scale=weight, arrow_scale=arrow_scale)
1225
1233
 
1234
+ if fluid_path_flow is not None:
1235
+
1236
+ if self.circuit.get_fluid_paths_number() == len(fluid_path_flow):
1237
+ for i, elm in enumerate(self.circuit.fluid_paths):
1238
+
1239
+ # try to find the diagram object of the DB object
1240
+ graphic_object = self.graphics_manager.query(elm)
1241
+
1242
+ if graphic_object:
1243
+ pass
1244
+
1226
1245
  def get_image(self, transparent: bool = False) -> QImage:
1227
1246
  """
1228
1247
  get the current picture
@@ -462,7 +462,9 @@ class LineGraphicTemplateItem(GenericDiagramWidget, QGraphicsLineItem):
462
462
  width=5,
463
463
  api_object: Union[Line, Transformer2W, VSC, UPFC, HvdcLine, DcLine, FluidPath, None] = None,
464
464
  arrow_size=10,
465
- draw_labels: bool = True):
465
+ draw_labels: bool = True,
466
+ arrow_f_pos=0.2,
467
+ arrow_t_pos=0.8, ):
466
468
  """
467
469
 
468
470
  :param from_port:
@@ -511,10 +513,10 @@ class LineGraphicTemplateItem(GenericDiagramWidget, QGraphicsLineItem):
511
513
 
512
514
  # arrows
513
515
  self.view_arrows = True
514
- self.arrow_p_from = ArrowHead(parent=self, arrow_size=arrow_size, position=0.2, under=False)
515
- self.arrow_q_from = ArrowHead(parent=self, arrow_size=arrow_size, position=0.2, under=True)
516
- self.arrow_p_to = ArrowHead(parent=self, arrow_size=arrow_size, position=0.8, under=False)
517
- self.arrow_q_to = ArrowHead(parent=self, arrow_size=arrow_size, position=0.8, under=True)
516
+ self.arrow_p_from = ArrowHead(parent=self, arrow_size=arrow_size, position=arrow_f_pos, under=False)
517
+ self.arrow_q_from = ArrowHead(parent=self, arrow_size=arrow_size, position=arrow_f_pos, under=True)
518
+ self.arrow_p_to = ArrowHead(parent=self, arrow_size=arrow_size, position=arrow_t_pos, under=False)
519
+ self.arrow_q_to = ArrowHead(parent=self, arrow_size=arrow_size, position=arrow_t_pos, under=True)
518
520
 
519
521
  if from_port and to_port:
520
522
  self.redraw()
@@ -843,6 +845,16 @@ class LineGraphicTemplateItem(GenericDiagramWidget, QGraphicsLineItem):
843
845
  self.arrow_p_to.set_value(Pt, True, Pt > 0, name="Pt", units="MW", draw_label=self.draw_labels)
844
846
  self.arrow_q_to.set_value(Pt, True, Pt > 0, name="Pt", units="MW", draw_label=self.draw_labels)
845
847
 
848
+ def set_arrows_with_fluid_flow(self, flow: float) -> None:
849
+ """
850
+ Set the arrow directions
851
+ :param flow: branch_flow (m3/s)
852
+ """
853
+ self.arrow_p_from.set_value(flow, True, flow < 0, name="flow", units="m3/s", draw_label=self.draw_labels)
854
+ self.arrow_q_from.set_value(flow, True, flow < 0, name="flow", units="m3/s", draw_label=False)
855
+ self.arrow_p_to.setVisible(False)
856
+ self.arrow_q_to.setVisible(False)
857
+
846
858
  def change_bus(self):
847
859
  """
848
860
  change the from or to bus of the nbranch with another selected bus
@@ -936,6 +948,7 @@ class LineGraphicTemplateItem(GenericDiagramWidget, QGraphicsLineItem):
936
948
  """
937
949
  if self._from_port:
938
950
  if 'Transformer3WGraphicItem' not in sys.modules:
951
+ # keep this here, we need an actual instance
939
952
  from GridCal.Gui.Diagrams.SchematicWidget.Branches.transformer3w_graphics import \
940
953
  Transformer3WGraphicItem
941
954
  return isinstance(self.get_terminal_from_parent(), Transformer3WGraphicItem)
@@ -949,6 +962,7 @@ class LineGraphicTemplateItem(GenericDiagramWidget, QGraphicsLineItem):
949
962
  """
950
963
  if self._to_port:
951
964
  if 'Transformer3WGraphicItem' not in sys.modules:
965
+ # keep this here, we need an actual instance
952
966
  from GridCal.Gui.Diagrams.SchematicWidget.Branches.transformer3w_graphics import \
953
967
  Transformer3WGraphicItem
954
968
  return isinstance(self.get_terminal_to_parent(), Transformer3WGraphicItem)
@@ -18,9 +18,9 @@ from __future__ import annotations
18
18
  import numpy as np
19
19
  from typing import Union, TYPE_CHECKING, List, Dict
20
20
  from PySide6 import QtWidgets
21
- from PySide6.QtCore import Qt, QPoint
22
- from PySide6.QtGui import QPen, QCursor, QIcon, QPixmap, QBrush, QPainterPath, QFont
23
- from PySide6.QtWidgets import QMenu, QGraphicsRectItem, QGraphicsSceneMouseEvent, QGraphicsTextItem
21
+ from PySide6.QtCore import Qt, QPoint, QPointF
22
+ from PySide6.QtGui import QPen, QCursor, QIcon, QPixmap, QBrush, QColor
23
+ from PySide6.QtWidgets import QMenu, QGraphicsSceneMouseEvent
24
24
 
25
25
  from GridCalEngine.Devices.Fluid import FluidNode, FluidTurbine, FluidPump, FluidP2x
26
26
  from GridCalEngine.Devices.Substation.bus import Bus
@@ -33,54 +33,13 @@ from GridCal.Gui.Diagrams.SchematicWidget.terminal_item import BarTerminalItem,
33
33
  from GridCal.Gui.Diagrams.SchematicWidget.Fluid.fluid_turbine_graphics import FluidTurbineGraphicItem
34
34
  from GridCal.Gui.Diagrams.SchematicWidget.Fluid.fluid_pump_graphics import FluidPumpGraphicItem
35
35
  from GridCal.Gui.Diagrams.SchematicWidget.Fluid.fluid_p2x_graphics import FluidP2xGraphicItem
36
- from GridCal.Gui.messages import yes_no_question
36
+ from GridCal.Gui.messages import yes_no_question, error_msg
37
+ from GridCal.Gui.gui_functions import add_menu_entry
37
38
 
38
39
  if TYPE_CHECKING: # Only imports the below statements during type checking
39
40
  from GridCal.Gui.Diagrams.SchematicWidget.schematic_widget import SchematicWidget
40
41
 
41
42
 
42
- class RoundedRect(QtWidgets.QGraphicsRectItem):
43
- """
44
- Rounded rectangle
45
- """
46
- def __init__(self, x, y, width, height, radius, parent):
47
- super().__init__(x, y, width, height, parent=parent)
48
- self.radius = radius
49
-
50
- def paint(self, painter, option, widget):
51
- path = QPainterPath()
52
- path.addRoundedRect(self.rect(), self.radius, self.radius)
53
- painter.setClipPath(path)
54
- painter.setBrush(self.brush())
55
- painter.setPen(self.pen())
56
- painter.drawRoundedRect(self.rect(), self.radius, self.radius)
57
-
58
-
59
- class VerticalWaterIndicator(QGraphicsRectItem):
60
- def __init__(self, x, y, width, height, outer_radius, inner_radius, parent=None):
61
- super().__init__(x, y, width, height, parent=parent)
62
- self.outer_radius = outer_radius
63
- self.inner_radius = inner_radius
64
- self.setBrush(Qt.lightGray) # Set the outer rectangle color
65
-
66
- self.inner_rect = QGraphicsRectItem(self.rect(), self)
67
- self.inner_rect.setBrush(Qt.blue) # Set the inner rectangle color
68
-
69
- self.label = QGraphicsTextItem('', self)
70
- self.label.setDefaultTextColor(Qt.black)
71
- self.label.setFont(QFont('Arial', 10))
72
-
73
- def set_percentage(self, percentage):
74
- # Update the inner rectangle size based on the percentage
75
- inner_height = self.rect().height() * percentage / 100
76
- self.inner_rect.setRect(self.rect().x(), self.rect().y() + self.rect().height() - inner_height,
77
- self.rect().width(), inner_height)
78
- self.inner_rect.setPos(self.rect().x(), self.rect().y())
79
-
80
- # Update the label text
81
- self.label.setPlainText(f'{percentage}%')
82
-
83
-
84
43
  class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
85
44
  """
86
45
  Represents a block in the diagram
@@ -96,7 +55,8 @@ class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
96
55
  parent=None, index=0, h: int = 20, w: int = 80, x: float = 0, y: float = 0,
97
56
  draw_labels: bool = True):
98
57
 
99
- GenericDiagramWidget.__init__(self, parent=parent, api_object=fluid_node, editor=editor, draw_labels=draw_labels)
58
+ GenericDiagramWidget.__init__(self, parent=parent, api_object=fluid_node, editor=editor,
59
+ draw_labels=draw_labels)
100
60
  QtWidgets.QGraphicsRectItem.__init__(self, parent)
101
61
 
102
62
  self.min_w = 180.0
@@ -105,6 +65,8 @@ class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
105
65
  self.h = h if h >= self.min_h else self.min_h
106
66
  self.w = w if w >= self.min_w else self.min_w
107
67
 
68
+ self.api_object: FluidNode = fluid_node # reassign for type to be clear
69
+
108
70
  # loads, shunts, generators, etc...
109
71
  self.shunt_children = list()
110
72
 
@@ -116,7 +78,7 @@ class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
116
78
  # index
117
79
  self.index = index
118
80
 
119
- self.color = ACTIVE['fluid']
81
+ self.color = QColor(fluid_node.color) if fluid_node is not None else ACTIVE['fluid']
120
82
  self.style = ACTIVE['style']
121
83
 
122
84
  # Label:
@@ -130,7 +92,8 @@ class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
130
92
 
131
93
  # connection terminals the block
132
94
  self._terminal = BarTerminalItem('s', parent=self, editor=self.editor) # , h=self.h))
133
- self._terminal.setPen(QPen(Qt.transparent, self.pen_width, self.style, Qt.RoundCap, Qt.RoundJoin))
95
+ self._terminal.setPen(QPen(Qt.GlobalColor.transparent, self.pen_width, self.style,
96
+ Qt.PenCapStyle.RoundCap, Qt.PenJoinStyle.RoundJoin))
134
97
 
135
98
  # Create corner for resize:
136
99
  self.sizer = HandleItem(self._terminal, callback=self.change_size)
@@ -141,16 +104,24 @@ class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
141
104
 
142
105
  self.set_tile_color(self.color)
143
106
 
144
- self.setPen(QPen(Qt.transparent, self.pen_width, self.style))
145
- self.setBrush(Qt.transparent)
107
+ self.setPen(QPen(Qt.GlobalColor.transparent, self.pen_width, self.style))
108
+ self.setBrush(Qt.GlobalColor.transparent)
146
109
  self.setFlags(self.GraphicsItemFlag.ItemIsSelectable | self.GraphicsItemFlag.ItemIsMovable)
147
- self.setCursor(QCursor(Qt.PointingHandCursor))
110
+ self.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
148
111
 
149
112
  # Update size:
150
113
  self.change_size(self.w, self.h)
151
114
 
152
115
  self.set_position(x, y)
153
116
 
117
+ def set_api_object_color(self):
118
+ """
119
+ Gether the color from the api object and apply
120
+ :return:
121
+ """
122
+ self.color = QColor(self.api_object.color) if self.api_object is not None else ACTIVE['fluid']
123
+ self.set_tile_color(self.color)
124
+
154
125
  def set_label(self, val: str):
155
126
  """
156
127
  Set the label content
@@ -210,6 +181,14 @@ class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
210
181
  if e is not None:
211
182
  e.recolour_mode()
212
183
 
184
+ def get_nexus_point(self) -> QPointF:
185
+ """
186
+ Get the connection point for the chldren nexus line
187
+ :return: QPointF
188
+ """
189
+ return QPointF(self.x() + self.rect().width() / 2.0,
190
+ self.y() + self.rect().height() + self._terminal.h / 2.0)
191
+
213
192
  def set_tile_color(self, brush):
214
193
  """
215
194
  Set the color of the title
@@ -320,49 +299,47 @@ class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
320
299
  menu = QMenu()
321
300
  menu.addSection("Fluid node")
322
301
 
323
- pl = menu.addAction('Plot profiles')
324
- plot_icon = QIcon()
325
- plot_icon.addPixmap(QPixmap(":/Icons/icons/plot.svg"))
326
- pl.setIcon(plot_icon)
327
- pl.triggered.connect(self.plot_profiles)
328
-
329
- arr = menu.addAction('Arrange')
330
- arr_icon = QIcon()
331
- arr_icon.addPixmap(QPixmap(":/Icons/icons/automatic_layout.svg"))
332
- arr.setIcon(arr_icon)
333
- arr.triggered.connect(self.arrange_children)
334
-
335
- ra3 = menu.addAction('Delete all the connections')
336
- del2_icon = QIcon()
337
- del2_icon.addPixmap(QPixmap(":/Icons/icons/delete_conn.svg"))
338
- ra3.setIcon(del2_icon)
339
- ra3.triggered.connect(self.delete_all_connections)
340
-
341
- da = menu.addAction('Delete')
342
- del_icon = QIcon()
343
- del_icon.addPixmap(QPixmap(":/Icons/icons/delete3.svg"))
344
- da.setIcon(del_icon)
345
- da.triggered.connect(self.remove)
302
+ add_menu_entry(menu=menu,
303
+ text="Plot electrical profiles",
304
+ icon_path=":/Icons/icons/plot.svg",
305
+ function_ptr=self.plot_electrical_profiles)
306
+
307
+ add_menu_entry(menu=menu,
308
+ text="Plot fluid profiles",
309
+ icon_path=":/Icons/icons/plot.svg",
310
+ function_ptr=self.plot_fluid_profiles)
311
+
312
+ add_menu_entry(menu=menu,
313
+ text="Arrange",
314
+ icon_path=":/Icons/icons/automatic_layout.svg",
315
+ function_ptr=self.arrange_children)
316
+
317
+ add_menu_entry(menu=menu,
318
+ text="Delete all the connections",
319
+ icon_path=":/Icons/icons/delete_conn.svg",
320
+ function_ptr=self.delete_all_connections)
321
+
322
+ add_menu_entry(menu=menu,
323
+ text="Delete",
324
+ icon_path=":/Icons/icons/delete3.svg",
325
+ function_ptr=self.remove)
346
326
 
347
327
  menu.addSection("Add")
348
328
 
349
- al = menu.addAction('Turbine')
350
- al_icon = QIcon()
351
- al_icon.addPixmap(QPixmap(":/Icons/icons/add_gen.svg"))
352
- al.setIcon(al_icon)
353
- al.triggered.connect(self.add_turbine)
329
+ add_menu_entry(menu=menu,
330
+ text="Turbine",
331
+ icon_path=":/Icons/icons/add_gen.svg",
332
+ function_ptr=self.add_turbine)
354
333
 
355
- ash = menu.addAction('Pump')
356
- ash_icon = QIcon()
357
- ash_icon.addPixmap(QPixmap(":/Icons/icons/add_gen.svg"))
358
- ash.setIcon(ash_icon)
359
- ash.triggered.connect(self.add_pump)
334
+ add_menu_entry(menu=menu,
335
+ text="Pump",
336
+ icon_path=":/Icons/icons/add_gen.svg",
337
+ function_ptr=self.add_pump)
360
338
 
361
- acg = menu.addAction('P2X')
362
- acg_icon = QIcon()
363
- acg_icon.addPixmap(QPixmap(":/Icons/icons/add_gen.svg"))
364
- acg.setIcon(acg_icon)
365
- acg.triggered.connect(self.add_p2x)
339
+ add_menu_entry(menu=menu,
340
+ text="P2X",
341
+ icon_path=":/Icons/icons/add_gen.svg",
342
+ function_ptr=self.add_p2x)
366
343
 
367
344
  menu.exec_(event.screenPos())
368
345
 
@@ -485,11 +462,147 @@ class FluidNodeGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
485
462
  """
486
463
  self.set_tile_color(QBrush(ACTIVE['color']))
487
464
 
488
- def plot_profiles(self):
465
+ def plot_electrical_profiles(self):
489
466
  """
490
467
 
491
468
  @return:
492
469
  """
493
470
  # get the index of this object
494
- i = self.editor.circuit.fluid_nodes.index(self.api_object)
495
- # self.editor.diagramScene.plot_bus(i, self.api_object)
471
+ if self.api_object is not None:
472
+ if self.api_object.bus is not None:
473
+ i = self.editor.circuit.fluid_nodes.index(self.api_object)
474
+ self.editor.plot_bus(i, self.api_object.bus)
475
+ else:
476
+ error_msg("No electrical bus attached :/")
477
+ else:
478
+ error_msg("No DB object attached :/")
479
+
480
+ def plot_fluid_profiles(self):
481
+ """
482
+
483
+ @return:
484
+ """
485
+ # get the index of this object
486
+ if self.api_object is not None:
487
+ i = self.editor.circuit.fluid_nodes.index(self.api_object)
488
+ self.editor.plot_fluid_node(i, self.api_object)
489
+ else:
490
+ error_msg("No DB object attached :/")
491
+
492
+ def set_values(self, i: int, Vm: float, Va: float, P: float, Q: float,
493
+ tpe: str, format_str="{:10.2f}"):
494
+ """
495
+
496
+ :param i:
497
+ :param Vm:
498
+ :param Va:
499
+ :param P:
500
+ :param Q:
501
+ :param tpe:
502
+ :param format_str:
503
+ :return:
504
+ """
505
+ if self.draw_labels:
506
+ vm = format_str.format(Vm)
507
+
508
+ if self.api_object is not None:
509
+ if self.api_object.bus is not None:
510
+ vm_kv = format_str.format(Vm * self.api_object.bus.Vnom)
511
+ else:
512
+ vm_kv = "No electrical bus"
513
+ else:
514
+ vm_kv = ""
515
+ va = format_str.format(Va)
516
+ msg = f"Bus {i}"
517
+ if tpe is not None:
518
+ msg += f" [{tpe}]"
519
+ msg += "<br>"
520
+ msg += f"v={vm}&lt;{va}º pu<br>"
521
+ msg += f"V={vm_kv} KV<br>"
522
+ if P is not None:
523
+ p = format_str.format(P)
524
+ q = format_str.format(Q)
525
+ msg += f"P={p} MW<br>Q={q} MVAr"
526
+ else:
527
+ msg = ""
528
+
529
+ title = self.api_object.name if self.api_object is not None else ""
530
+ self.label.setHtml(f'<html><head/><body><p><span style=" font-size:10pt;">{title}<br/></span>'
531
+ f'<span style=" font-size:6pt;">{msg}</span></p></body></html>')
532
+
533
+ self.setToolTip(msg)
534
+
535
+ def set_fluid_values(self, i: int, Vm: float, Va: float, P: float, Q: float,
536
+ tpe: str,
537
+ fluid_node_p2x_flow: float,
538
+ fluid_node_current_level: float,
539
+ fluid_node_spillage: float,
540
+ fluid_node_flow_in: float,
541
+ fluid_node_flow_out: float,
542
+ format_str="{:10.2f}"):
543
+ """
544
+
545
+ :param i:
546
+ :param Vm:
547
+ :param Va:
548
+ :param P:
549
+ :param Q:
550
+ :param tpe:
551
+ :param fluid_node_p2x_flow:
552
+ :param fluid_node_current_level:
553
+ :param fluid_node_spillage:
554
+ :param fluid_node_flow_in:
555
+ :param fluid_node_flow_out:
556
+ :param format_str:
557
+ :return:
558
+ """
559
+ if self.draw_labels:
560
+ vm = format_str.format(Vm)
561
+
562
+ if self.api_object is not None:
563
+ if self.api_object.bus is not None:
564
+ vm_kv = format_str.format(Vm * self.api_object.bus.Vnom)
565
+ else:
566
+ vm_kv = "No electrical bus"
567
+ else:
568
+ vm_kv = ""
569
+ va = format_str.format(Va)
570
+ msg = f"Bus {i}"
571
+ if tpe is not None:
572
+ msg += f" [{tpe}]"
573
+ msg += "<br>"
574
+ msg += f"v={vm}&lt;{va}º pu<br>"
575
+ msg += f"V={vm_kv} KV<br>"
576
+ if P is not None:
577
+ p = format_str.format(P)
578
+ q = format_str.format(Q)
579
+ msg += f"P={p} MW<br>Q={q} MVAr<br>"
580
+
581
+ if fluid_node_flow_in is not None:
582
+ f_in = format_str.format(fluid_node_flow_in)
583
+ msg += f"In={f_in} m3/s<br>"
584
+
585
+ if fluid_node_flow_out is not None:
586
+ f_out = format_str.format(fluid_node_flow_out)
587
+ msg += f"Out={f_out} m3/s<br>"
588
+
589
+ if fluid_node_spillage is not None:
590
+ f_spill = format_str.format(fluid_node_spillage)
591
+ msg += f"Spill={f_spill} m3/s<br>"
592
+
593
+ if fluid_node_current_level is not None:
594
+ f_lvl = format_str.format(fluid_node_current_level)
595
+ msg += f"Lvl={f_lvl} m3<br>"
596
+
597
+ if fluid_node_p2x_flow is not None:
598
+ f_p2x = format_str.format(fluid_node_p2x_flow)
599
+ msg += f"P2X={f_p2x} m3/s<br>"
600
+
601
+ else:
602
+ msg = ""
603
+
604
+ title = self.api_object.name if self.api_object is not None else ""
605
+ self.label.setHtml(f'<html><head/><body><p><span style=" font-size:10pt;">{title}<br/></span>'
606
+ f'<span style=" font-size:6pt;">{msg}</span></p></body></html>')
607
+
608
+ self.setToolTip(msg)
@@ -16,11 +16,12 @@
16
16
  # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
  from __future__ import annotations
18
18
  from typing import TYPE_CHECKING
19
- from PySide6.QtGui import QPen, QIcon, QPixmap
19
+ from PySide6.QtGui import QPen
20
20
  from PySide6.QtWidgets import (QMenu, QGraphicsTextItem)
21
21
  from GridCalEngine.Devices.Fluid.fluid_p2x import FluidP2x
22
22
  from GridCal.Gui.Diagrams.generic_graphics import ACTIVE, DEACTIVATED, OTHER, Circle
23
23
  from GridCal.Gui.messages import yes_no_question
24
+ from GridCal.Gui.gui_functions import add_menu_entry
24
25
  from GridCal.Gui.Diagrams.SchematicWidget.Injections.injections_template_graphics import InjectionTemplateGraphicItem
25
26
 
26
27
  if TYPE_CHECKING: # Only imports the below statements during type checking
@@ -89,30 +90,22 @@ class FluidP2xGraphicItem(InjectionTemplateGraphicItem):
89
90
  menu = QMenu()
90
91
  menu.addSection("Power2X")
91
92
 
92
- # pc = menu.addAction('Voltage control')
93
- # pc.setCheckable(True)
94
- # pc.setChecked(self.api_object.is_controlled)
95
- # pc.triggered.connect(self.enable_disable_control_toggle)
96
-
97
- pa = menu.addAction('Plot profiles')
98
- plot_icon = QIcon()
99
- plot_icon.addPixmap(QPixmap(":/Icons/icons/plot.svg"))
100
- pa.setIcon(plot_icon)
101
- pa.triggered.connect(self.plot)
93
+ add_menu_entry(menu=menu,
94
+ text="Plot fluid profiles",
95
+ icon_path=":/Icons/icons/plot.svg",
96
+ function_ptr=self.plot)
102
97
 
103
98
  menu.addSeparator()
104
99
 
105
- da = menu.addAction('Delete')
106
- del_icon = QIcon()
107
- del_icon.addPixmap(QPixmap(":/Icons/icons/delete3.svg"))
108
- da.setIcon(del_icon)
109
- da.triggered.connect(self.remove)
110
-
111
- rabf = menu.addAction('Change bus')
112
- move_bus_icon = QIcon()
113
- move_bus_icon.addPixmap(QPixmap(":/Icons/icons/move_bus.svg"))
114
- rabf.setIcon(move_bus_icon)
115
- rabf.triggered.connect(self.change_bus)
100
+ add_menu_entry(menu=menu,
101
+ text="Delete",
102
+ icon_path=":/Icons/icons/delete3.svg",
103
+ function_ptr=self.remove)
104
+
105
+ add_menu_entry(menu=menu,
106
+ text="Change bus",
107
+ icon_path=":/Icons/icons/move_bus.svg",
108
+ function_ptr=self.change_bus)
116
109
 
117
110
  menu.exec_(event.screenPos())
118
111