GridCal 5.3.21__tar.gz → 5.3.23__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 (289) hide show
  1. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +87 -28
  2. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +12 -0
  3. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +9 -2
  4. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/build_diff_tree.py +2 -2
  5. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/MainWindow.py +6 -0
  6. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Server/server.py +5 -2
  7. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -1
  8. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/server_driver.py +21 -7
  9. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/__version__.py +1 -1
  10. {gridcal-5.3.21 → gridcal-5.3.23}/PKG-INFO +1 -1
  11. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ExecuteGridCal.py +0 -0
  12. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  13. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  14. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  15. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  16. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  17. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  18. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/__init__.py +0 -0
  19. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/gui.py +0 -0
  20. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  21. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  22. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  23. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  24. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  25. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  26. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  27. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  28. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  29. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  30. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  31. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  32. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  33. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  34. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  35. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  36. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  37. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  38. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  39. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  40. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  41. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  42. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  43. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  44. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  45. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  46. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  47. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  48. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  49. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  50. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  51. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  52. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  53. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  54. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  55. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  56. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  57. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  58. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  59. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  60. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  61. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  62. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  63. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  64. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  65. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  66. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  67. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  68. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  69. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
  70. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  71. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  72. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  73. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  74. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  75. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  76. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  77. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  78. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  79. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  80. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  81. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  82. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  83. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  84. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  85. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  86. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  87. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  88. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  89. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  90. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  91. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  92. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  93. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  94. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  95. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  96. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  97. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  98. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  99. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  100. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  101. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  102. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/__init__.py +0 -0
  103. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  104. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  105. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  106. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  107. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  108. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  109. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/gui.py +0 -0
  110. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  111. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  112. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/__init__.py +0 -0
  113. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/demo_code.py +0 -0
  114. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
  115. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
  116. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
  117. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
  118. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
  119. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
  120. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
  121. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  122. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  123. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  124. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  125. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  126. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  127. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  128. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  129. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  130. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  131. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  132. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  133. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/GridCalMain.py +0 -0
  134. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  135. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  136. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
  137. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  138. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  139. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  140. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  141. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  142. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  143. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  144. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  145. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  146. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  147. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  148. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  149. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
  150. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/__init__.py +0 -0
  151. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/icons_rc.py +0 -0
  152. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/object_select_window.py +0 -0
  153. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/update_gui_file.py +0 -0
  154. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  155. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  156. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  157. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  158. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  159. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  160. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  161. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  162. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  163. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  164. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  165. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  166. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  167. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  168. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  169. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  170. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  171. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  172. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  173. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  174. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  175. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  176. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  177. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  178. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  179. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  180. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  181. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  182. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  183. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  184. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  185. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  186. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  187. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  188. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  189. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  190. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  191. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  192. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  193. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  194. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  195. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  196. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  197. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
  198. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  199. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  200. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  201. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  202. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  203. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  204. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Visualization/__init__.py +0 -0
  205. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Visualization/visualization.py +0 -0
  206. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Widgets/__init__.py +0 -0
  207. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  208. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  209. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  210. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  211. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  212. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  213. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  214. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/__init__.py +0 -0
  215. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/associations_model.py +0 -0
  216. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/general_dialogues.py +0 -0
  217. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/gui_functions.py +0 -0
  218. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/messages.py +0 -0
  219. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/object_model.py +0 -0
  220. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/pandas_model.py +0 -0
  221. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/plot_config.py +0 -0
  222. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/profiles_model.py +0 -0
  223. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/python_console.py +0 -0
  224. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/python_highlighter.py +0 -0
  225. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/results_model.py +0 -0
  226. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/table_view_header_wrap.py +0 -0
  227. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/themes.py +0 -0
  228. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/toast_widget.py +0 -0
  229. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/update_gui_all.py +0 -0
  230. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/update_gui_common.py +0 -0
  231. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/wrappable_table_model.py +0 -0
  232. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/LICENSE.txt +0 -0
  233. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/__init__.py +0 -0
  234. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/export_results_driver.py +0 -0
  235. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/file_handler.py +0 -0
  236. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/session.py +0 -0
  237. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/synchronization_driver.py +0 -0
  238. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/__init__.py +0 -0
  239. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  240. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  241. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  242. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  243. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  244. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  245. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  246. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  247. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  248. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  249. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  250. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  251. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  252. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  253. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  254. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  255. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  256. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  257. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  258. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  259. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  260. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  261. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  262. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  263. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  264. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  265. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  266. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  267. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  268. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  269. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  270. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  271. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  272. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  273. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  274. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  275. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  276. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  277. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/__init__.py +0 -0
  278. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/GridCal.ico +0 -0
  279. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/GridCal.svg +0 -0
  280. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/__init__.py +0 -0
  281. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/cables.csv +0 -0
  282. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/sequence_lines.csv +0 -0
  283. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/transformers.csv +0 -0
  284. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/wires.csv +0 -0
  285. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/plugins.py +0 -0
  286. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/templates.py +0 -0
  287. {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/update.py +0 -0
  288. {gridcal-5.3.21 → gridcal-5.3.23}/setup.cfg +0 -0
  289. {gridcal-5.3.21 → gridcal-5.3.23}/setup.py +0 -0
@@ -6,7 +6,8 @@ from __future__ import annotations
6
6
  import webbrowser
7
7
  from typing import List, TYPE_CHECKING, Tuple
8
8
  from PySide6 import QtWidgets
9
- from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent, QGraphicsRectItem
9
+ from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent, QGraphicsRectItem, \
10
+ QMessageBox
10
11
  from PySide6.QtCore import Qt, QPointF
11
12
  from PySide6.QtGui import QBrush, QColor
12
13
  from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
@@ -20,10 +21,11 @@ from GridCalEngine.Devices.Substation.bus import Bus
20
21
  from GridCalEngine.Devices import VoltageLevel
21
22
  from GridCalEngine.Devices.Substation.substation import Substation
22
23
  from GridCalEngine.enumerations import DeviceType
24
+ from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
25
+ from GridCal.Gui.Diagrams.SchematicWidget import schematic_widget
23
26
 
24
27
  if TYPE_CHECKING: # Only imports the below statements during type checking
25
28
  from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
26
- from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
27
29
 
28
30
 
29
31
  class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
@@ -108,7 +110,10 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
108
110
  :param se: other SubstationGraphicItem
109
111
  """
110
112
  self._callbacks += se._callbacks
111
- self.voltage_level_graphics += se.voltage_level_graphics
113
+ for vl_graphic in se.voltage_level_graphics:
114
+ self.register_voltage_level(vl=vl_graphic.get_copy(new_parent=self))
115
+
116
+ self.sort_voltage_levels()
112
117
 
113
118
  def set_size(self, r: float):
114
119
  """
@@ -237,6 +242,23 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
237
242
  longitude=long,
238
243
  graphic_object=self)
239
244
 
245
+ def refresh(self, pos: QPointF):
246
+ """
247
+ This function refreshes the x, y coordinates of the graphic item
248
+ Returns:
249
+
250
+ """
251
+
252
+ x = pos.x() - self.rect().width() / 2
253
+ y = pos.y() - self.rect().height() / 2
254
+ self.setRect(x, y, self.rect().width(), self.rect().height())
255
+ self.set_callbacks(pos.x(), pos.y())
256
+
257
+ for vl_graphics in self.voltage_level_graphics:
258
+ vl_graphics.center_on_substation()
259
+
260
+ self.update_position_at_the_diagram() # always update
261
+
240
262
  def get_center_pos(self) -> QPointF:
241
263
  """
242
264
  Get the center position
@@ -254,22 +276,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
254
276
  if self.hovered:
255
277
  # super().mouseMoveEvent(event)
256
278
  pos = self.mapToParent(event.pos())
257
- x = pos.x() - self.rect().width() / 2
258
- y = pos.y() - self.rect().height() / 2
259
- self.setRect(x, y, self.rect().width(), self.rect().height())
260
- self.set_callbacks(pos.x(), pos.y())
261
-
262
- for vl_graphics in self.voltage_level_graphics:
263
- vl_graphics.center_on_substation()
264
-
265
- self.update_position_at_the_diagram() # always update
266
-
267
- # QGraphicsRectItem.mouseMoveEvent(self, event)
268
- # pos = self.mapToParent(event.pos())
269
- # x = pos.x() + self.rect().width() / 2
270
- # y = pos.y() + self.rect().height() / 2
271
- # self.set_callbacks(x, y)
272
- # self.update_position_at_the_diagram() # always update
279
+ self.refresh(pos=pos)
273
280
 
274
281
  def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
275
282
  """
@@ -413,7 +420,8 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
413
420
  "Remove substation from schematic")
414
421
 
415
422
  if ok:
416
- self.editor.remove_substation(substation=self, delete_from_db=False)
423
+ self.editor.remove_substation(api_object=self.api_object, delete_from_db=False, substation_buses=[],
424
+ voltage_levels=[])
417
425
 
418
426
  def remove_function_from_schematic_and_db(self) -> None:
419
427
  """
@@ -514,8 +522,6 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
514
522
  dialog.setModal(True)
515
523
  dialog.exec()
516
524
 
517
-
518
-
519
525
  def move_to_api_coordinates(self):
520
526
  """
521
527
  Function to move the graphics to the Database location
@@ -544,7 +550,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
544
550
  dlg.exec()
545
551
 
546
552
  if dlg.is_accepted:
547
-
553
+ selected_buses = []
548
554
  deleted_api_objs: List[Substation] = list()
549
555
 
550
556
  # Collect all codes to merge
@@ -556,15 +562,18 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
556
562
  if merged_codes == "":
557
563
  merged_codes = se_graphics.api_object.code
558
564
  else:
559
- merged_codes = merged_codes + ',' + se_graphics.api_object.code
565
+ if se_graphics.api_object.code != "":
566
+ merged_codes = merged_codes + ',' + se_graphics.api_object.code
560
567
 
561
568
  deleted_api_objs.append(se_graphics.api_object)
562
569
 
563
570
  if se_graphics != self:
564
571
  self.merge(se=se_graphics)
565
- self.editor.remove_substation(substation=se_graphics,
566
- delete_from_db=True,
567
- delete_connections=False)
572
+ sub = self.editor.graphics_manager.delete_device(se_graphics.api_object)
573
+ self.editor.map.diagram_scene.removeItem(sub)
574
+ # self.editor.remove_substation(substation=se_graphics,
575
+ # delete_from_db=True,
576
+ # delete_connections=False)
568
577
 
569
578
  # Update the code of the base substation
570
579
  self.api_object.code = merged_codes # Needed?
@@ -578,11 +587,14 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
578
587
  # re-index the stuff pointing at deleted api elements to this api object
579
588
  for vl in self.editor.circuit.voltage_levels:
580
589
  if vl.substation in deleted_api_objs:
590
+ print(f'{vl.substation.name} changed to {self.api_object.name} for {vl.name}')
581
591
  vl.substation = self.api_object
582
592
 
583
593
  for bus in self.editor.circuit.buses:
584
594
  if bus.substation in deleted_api_objs:
595
+ print(f'{bus.substation.name} changed to {self.api_object.name} for {bus.name}')
585
596
  bus.substation = self.api_object
597
+ selected_buses.append(bus)
586
598
 
587
599
  # remove connections that are from and to the same substation
588
600
  for tpe in [DeviceType.LineDevice, DeviceType.DCLineDevice, DeviceType.HVDCLineDevice]:
@@ -590,7 +602,54 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
590
602
  if elm.api_object.get_substation_from() == elm.api_object.get_substation_to():
591
603
  self.editor.remove_branch_graphic(elm, delete_from_db=True)
592
604
 
593
- self.update_position_at_the_diagram() # always update
605
+ for substation in deleted_api_objs:
606
+ if substation == self.api_object:
607
+ pass
608
+ else:
609
+ self.editor.circuit.delete_substation(obj=substation)
610
+
611
+ self.refresh(pos=self.get_pos()) # always update
612
+
613
+ if len(selected_buses):
614
+
615
+ dlg = CheckListDialogue(
616
+ objects_list=[f'Create schematic diagram for the recipient substation {self.api_object.name}',
617
+ f'Unify buses and voltage levels with the same nominal voltage in recipient '
618
+ f'substation {self.api_object.name}'],
619
+ title=f"Finishing merging proces in substation{self.api_object.name}"
620
+ )
621
+ dlg.setModal(True)
622
+ dlg.exec()
623
+
624
+
625
+ if dlg.accepted:
626
+ for index in dlg.selected_indices:
627
+ if index == 0:
628
+ diagram = schematic_widget.make_diagram_from_buses(circuit=self.editor.circuit,
629
+ buses=selected_buses,
630
+ name=self.api_object.name + " diagram")
631
+
632
+ diagram_widget = schematic_widget.SchematicWidget(gui=self.editor.gui,
633
+ circuit=self.editor.circuit,
634
+ diagram=diagram,
635
+ default_bus_voltage=self.editor.gui.ui.defaultBusVoltageSpinBox.value(),
636
+ time_index=self.editor.gui.get_diagram_slider_index())
637
+
638
+ self.editor.gui.add_diagram_widget_and_diagram(diagram_widget=diagram_widget,
639
+ diagram=diagram)
640
+ self.editor.gui.set_diagrams_list_view()
641
+ self.editor.gui.set_diagram_widget(widget=diagram_widget)
642
+ elif index == 1:
643
+ pass
644
+ #TODO: Merge items
645
+ else:
646
+ self.editor.gui.show_info_toast(
647
+ message='Merge ended. There was no diagram produced. The buses and voltages were not unified.')
648
+
649
+ else:
650
+ self.editor.gui.show_info_toast(
651
+ message='The substation merged have no associated buses. No schematic can be produced.')
652
+
594
653
 
595
654
  def new_substation_diagram(self):
596
655
  """
@@ -149,6 +149,18 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
149
149
  longitude=long,
150
150
  graphic_object=self)
151
151
 
152
+ def get_copy(self, new_parent: SubstationGraphicItem):
153
+ """
154
+ Returns a copy of the VoltageLevelGraphicItem with a different parent
155
+ :param new_parent: New Substation Graphic item parent
156
+ :return: Copy of the VL Grpahic Item with new parent.
157
+ """
158
+ return VoltageLevelGraphicItem(parent=new_parent, editor=new_parent.editor, api_object=self.api_object,
159
+ r=self.radius / self.api_object.Vnom / 0.01, draw_labels=self.draw_labels)
160
+
161
+
162
+
163
+
152
164
  def mouseMoveEvent(self, event: QtWidgets.QGraphicsSceneMouseEvent) -> None:
153
165
  """
154
166
  Event handler for mouse move events.
@@ -2482,7 +2482,8 @@ def get_devices_to_expand(circuit: MultiCircuit, substations: List[Substation],
2482
2482
 
2483
2483
  if bus.voltage_level is not None:
2484
2484
  voltage_levels.add(bus.voltage_level)
2485
- substations_extended.add(bus.substation)
2485
+ if bus.substation not in substations_extended:
2486
+ substations_extended.add(bus.substation)
2486
2487
 
2487
2488
  if level < max_level:
2488
2489
 
@@ -2521,7 +2522,13 @@ def get_devices_to_expand(circuit: MultiCircuit, substations: List[Substation],
2521
2522
  else:
2522
2523
  raise Exception(f'Unrecognized branch type {obj.device_type.value}')
2523
2524
 
2524
- return list(substations_extended), list(voltage_levels), lines, dc_lines, hvdc_lines
2525
+ list_substations_extended = list(substations_extended)
2526
+
2527
+ for substation in substations:
2528
+ if substation not in list_substations_extended:
2529
+ list_substations_extended.append(substation)
2530
+
2531
+ return list_substations_extended, list(voltage_levels), lines, dc_lines, hvdc_lines
2525
2532
 
2526
2533
 
2527
2534
  def make_diagram_from_substations(circuit: MultiCircuit,
@@ -95,8 +95,8 @@ def populate_tree(tree_widget, base: MultiCircuit, diff: MultiCircuit,
95
95
 
96
96
  child_item = QtWidgets.QTreeWidgetItem(
97
97
  parent_item,
98
- [f"{elm.device_type.value}", "Mod", f"{elm.idtag}", f"{elm.name}",
99
- prop.name, str(base_val), str(new_val)]
98
+ [f"{diff_name}", f"{elm.device_type.value}", "Mod", f"{elm.idtag}",
99
+ f"{elm.name}", prop.name, str(base_val), str(new_val)]
100
100
  )
101
101
  child_item.setCheckState(0, Qt.CheckState.Unchecked)
102
102
 
@@ -4603,6 +4603,11 @@ class Ui_mainWindow(object):
4603
4603
 
4604
4604
  self.horizontalLayout_8.addWidget(self.server_pwd_lineEdit)
4605
4605
 
4606
+ self.secureServerConnectionCheckBox = QCheckBox(self.frame_2)
4607
+ self.secureServerConnectionCheckBox.setObjectName(u"secureServerConnectionCheckBox")
4608
+
4609
+ self.horizontalLayout_8.addWidget(self.secureServerConnectionCheckBox)
4610
+
4606
4611
  self.horizontalSpacer_7 = QSpacerItem(304, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
4607
4612
 
4608
4613
  self.horizontalLayout_8.addItem(self.horizontalSpacer_7)
@@ -6030,6 +6035,7 @@ class Ui_mainWindow(object):
6030
6035
  #if QT_CONFIG(tooltip)
6031
6036
  self.server_pwd_lineEdit.setToolTip(QCoreApplication.translate("mainWindow", u"Type here the GridCal server password (ask your IT team)", None))
6032
6037
  #endif // QT_CONFIG(tooltip)
6038
+ self.secureServerConnectionCheckBox.setText(QCoreApplication.translate("mainWindow", u"Secure", None))
6033
6039
  self.server_status_label.setText(QCoreApplication.translate("mainWindow", u"...", None))
6034
6040
  self.settings_tabWidget.setTabText(self.settings_tabWidget.indexOf(self.tab_5), QCoreApplication.translate("mainWindow", u"Server", None))
6035
6041
  self.tabWidget.setTabText(self.tabWidget.indexOf(self.SettingsTab), QCoreApplication.translate("mainWindow", u"Settings", None))
@@ -26,7 +26,7 @@ class ServerMain(BaseMainGui):
26
26
  BaseMainGui.__init__(self, parent=parent)
27
27
 
28
28
  # Server driver
29
- self.server_driver: ServerDriver = ServerDriver(url="", port=0, pwd="")
29
+ self.server_driver: ServerDriver = ServerDriver(url="", port=0, pwd="", secure=False)
30
30
  self.server_driver.connected_signal.connect(self.server_connected)
31
31
  self.server_driver.done_signal.connect(self.post_start_stop_server) # connect the post function
32
32
 
@@ -61,7 +61,8 @@ class ServerMain(BaseMainGui):
61
61
  return {"url": self.ui.server_url_lineEdit.text(),
62
62
  "port": self.ui.server_port_spinBox.value(),
63
63
  "user": "",
64
- "pwd": self.ui.server_pwd_lineEdit.text()}
64
+ "pwd": self.ui.server_pwd_lineEdit.text(),
65
+ "secure": self.ui.secureServerConnectionCheckBox.isChecked(),}
65
66
 
66
67
  def save_server_config(self):
67
68
  """
@@ -81,6 +82,7 @@ class ServerMain(BaseMainGui):
81
82
  self.ui.server_port_spinBox.setValue(data.get("port", 8080))
82
83
  # "user": "",
83
84
  self.ui.server_pwd_lineEdit.setText(data.get("pwd", "1234"))
85
+ self.ui.secureServerConnectionCheckBox.setChecked(data.get("secure", True))
84
86
 
85
87
  def load_server_config(self) -> None:
86
88
  """
@@ -107,6 +109,7 @@ class ServerMain(BaseMainGui):
107
109
  self.server_driver.set_values(url=self.ui.server_url_lineEdit.text().strip(),
108
110
  port=self.ui.server_port_spinBox.value(),
109
111
  pwd=self.ui.server_pwd_lineEdit.text().strip(),
112
+ secure=self.ui.secureServerConnectionCheckBox.isChecked(),
110
113
  status_func=self.ui.server_status_label.setText)
111
114
 
112
115
  # save the last server config
@@ -179,7 +179,6 @@ class ConfigurationMain(ResultsMain):
179
179
  }
180
180
  },
181
181
  "linear": {
182
-
183
182
  "ptdf_threshold": self.ui.ptdf_threshold_doubleSpinBox,
184
183
  "lodf_threshold": self.ui.lodf_threshold_doubleSpinBox
185
184
  },
@@ -147,7 +147,8 @@ class ServerDriver(QThread):
147
147
  sync_event = Signal()
148
148
  items_processed_event = Signal()
149
149
 
150
- def __init__(self, url: str, port: int, pwd: str, sleep_time: int = 2, status_func: Callable[[str], None] = None):
150
+ def __init__(self, url: str, port: int, pwd: str, sleep_time: int = 2, status_func: Callable[[str], None] = None,
151
+ secure: bool = False):
151
152
  """
152
153
  Constructor
153
154
  :param url: Server URL
@@ -163,6 +164,7 @@ class ServerDriver(QThread):
163
164
  self.pwd = pwd
164
165
  self.sleep_time = sleep_time
165
166
  self.status_func: Callable[[str], None] = status_func
167
+ self.secure = secure
166
168
  self.__running__ = False
167
169
 
168
170
  self.logger = Logger()
@@ -175,19 +177,23 @@ class ServerDriver(QThread):
175
177
  self.__cancel__ = False
176
178
  self.__pause__ = False
177
179
 
178
- def set_values(self, url: str, port: int, pwd: str, sleep_time: int = 2, status_func: Callable[[str], None] = None):
180
+ def set_values(self, url: str, port: int, pwd: str, sleep_time: int = 2,
181
+ secure: bool = False,
182
+ status_func: Callable[[str], None] = None):
179
183
  """
180
184
  Set the values
181
185
  :param url: Server URL
182
186
  :param port: Server port
183
187
  :param pwd: Server password
184
188
  :param sleep_time: Sleep time (s)
189
+ :param secure: Use https?
185
190
  :param status_func: a text function pointer
186
191
  """
187
192
  self.url = url
188
193
  self.port = port
189
194
  self.pwd = pwd
190
195
  self.sleep_time = sleep_time
196
+ self.secure = secure
191
197
  self.status_func: Callable[[str], None] = status_func
192
198
  self.__running__ = False
193
199
  self.logger = Logger()
@@ -206,7 +212,10 @@ class ServerDriver(QThread):
206
212
  Base URL of the service
207
213
  :return:
208
214
  """
209
- return f"https://{self.url}:{self.port}"
215
+ if self.secure:
216
+ return f"https://{self.url}:{self.port}"
217
+ else:
218
+ return f"http://{self.url}:{self.port}"
210
219
 
211
220
  def get_certificate_path(self):
212
221
 
@@ -504,9 +513,15 @@ class RemoteJobDriver(QThread):
504
513
  model_data = gather_model_as_jsons_for_communication(circuit=self.grid, instruction=self.instruction)
505
514
 
506
515
  try:
507
- response = send_json_data(json_data=model_data,
508
- endpoint_url=websocket_url,
509
- certificate=self.certificate_path)
516
+ response, ok = send_json_data(json_data=model_data,
517
+ endpoint_url=websocket_url,
518
+ certificate=self.certificate_path)
519
+
520
+ if not ok:
521
+ response_text = response
522
+ self.logger.add_error("Response error", value=response_text)
523
+ response = None
524
+
510
525
  except requests.exceptions.ConnectionError as e:
511
526
  warn(str(e))
512
527
  response = None
@@ -516,7 +531,6 @@ class RemoteJobDriver(QThread):
516
531
 
517
532
  success = response.get("success", False)
518
533
 
519
-
520
534
  if success:
521
535
  results_data = response["results"]
522
536
 
@@ -6,7 +6,7 @@ import datetime
6
6
  _current_year_ = datetime.datetime.now().year
7
7
 
8
8
  # do not forget to keep a three-number version!!!
9
- __GridCal_VERSION__ = "5.3.21"
9
+ __GridCal_VERSION__ = "5.3.23"
10
10
 
11
11
  url = 'https://github.com/SanPen/GridCal'
12
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: GridCal
3
- Version: 5.3.21
3
+ Version: 5.3.23
4
4
  Summary: GridCal is a Power Systems simulation program intended for professional use and research
5
5
  Home-page: https://github.com/SanPen/GridCal
6
6
  Author: Santiago Peñate Vera et. Al.