GridCal 5.3.20__tar.gz → 5.3.21__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.20 → gridcal-5.3.21}/GridCal/Gui/Analysis/AnalysisDialogue.py +1 -1
  2. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +14 -2
  3. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +1 -1
  4. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +84 -108
  5. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +16 -6
  6. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +27 -11
  7. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +28 -28
  8. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/base_diagram_widget.py +5 -11
  9. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/MainWindow.py +301 -217
  10. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +102 -42
  11. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/objects.py +1 -4
  12. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/time_events.py +21 -35
  13. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Server/server.py +13 -3
  14. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +1 -1
  15. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/base_gui.py +37 -1
  16. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/io.py +7 -7
  17. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/simulations.py +46 -44
  18. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/icons_rc.py +1 -1
  19. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/icons_rc.py +450 -26
  20. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/profile_dialogue.py +256 -128
  21. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +69 -115
  22. gridcal-5.3.21/GridCal/Gui/toast_widget.py +184 -0
  23. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Session/server_driver.py +3 -24
  24. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/__version__.py +1 -1
  25. {gridcal-5.3.20 → gridcal-5.3.21}/PKG-INFO +1 -1
  26. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ExecuteGridCal.py +0 -0
  27. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  28. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  29. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  30. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  31. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  32. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Analysis/__init__.py +0 -0
  33. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Analysis/gui.py +0 -0
  34. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  35. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  36. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  37. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  38. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  39. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  40. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  41. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  42. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  43. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  44. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  45. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  46. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  47. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  48. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  49. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  50. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  51. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  52. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  53. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  54. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  55. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  56. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  57. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  58. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  59. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  60. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  61. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  62. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  63. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  64. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  65. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  66. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  67. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  68. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  69. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  70. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  71. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  72. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  73. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  74. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  75. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  76. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  77. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  78. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  79. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  80. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  81. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
  82. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  83. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  84. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  85. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  86. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  87. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  88. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  89. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  90. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  91. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  92. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  93. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  94. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  95. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  96. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  97. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  98. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  99. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  100. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  101. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  102. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  103. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  104. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  105. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  106. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  107. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  108. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  109. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  110. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  111. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  112. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  113. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/__init__.py +0 -0
  114. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  115. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  116. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  117. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  118. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  119. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/gui.py +0 -0
  120. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  121. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  122. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/__init__.py +0 -0
  123. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
  124. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/demo_code.py +0 -0
  125. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
  126. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
  127. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
  128. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
  129. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
  130. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
  131. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
  132. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  133. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  134. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  135. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  136. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  137. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  138. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  139. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  140. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  141. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  142. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  143. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  144. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/GridCalMain.py +0 -0
  145. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  146. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  147. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  148. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  149. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  150. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  151. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  152. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  153. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  154. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  155. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/__init__.py +0 -0
  156. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/object_select_window.py +0 -0
  157. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Main/update_gui_file.py +0 -0
  158. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  159. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  160. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  161. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  162. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  163. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  164. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  165. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  166. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  167. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  168. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  169. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  170. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  171. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  172. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  173. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  174. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  175. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  176. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  177. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  178. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  179. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  180. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  181. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  182. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  183. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  184. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  185. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  186. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  187. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  188. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  189. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  190. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  191. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  192. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  193. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  194. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  195. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  196. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  197. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  198. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
  199. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  200. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  201. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  202. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  203. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  204. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  205. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Visualization/__init__.py +0 -0
  206. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Visualization/visualization.py +0 -0
  207. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Widgets/__init__.py +0 -0
  208. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  209. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  210. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  211. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  212. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  213. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  214. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  215. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/__init__.py +0 -0
  216. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/associations_model.py +0 -0
  217. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/general_dialogues.py +0 -0
  218. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/gui_functions.py +0 -0
  219. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/messages.py +0 -0
  220. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/object_model.py +0 -0
  221. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/pandas_model.py +0 -0
  222. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/plot_config.py +0 -0
  223. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/profiles_model.py +0 -0
  224. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/python_console.py +0 -0
  225. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/python_highlighter.py +0 -0
  226. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/results_model.py +0 -0
  227. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/table_view_header_wrap.py +0 -0
  228. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/themes.py +0 -0
  229. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/update_gui_all.py +0 -0
  230. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/update_gui_common.py +0 -0
  231. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Gui/wrappable_table_model.py +0 -0
  232. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/LICENSE.txt +0 -0
  233. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Session/__init__.py +0 -0
  234. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Session/export_results_driver.py +0 -0
  235. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Session/file_handler.py +0 -0
  236. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Session/session.py +0 -0
  237. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/Session/synchronization_driver.py +0 -0
  238. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/__init__.py +0 -0
  239. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  240. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  241. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  242. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  243. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  244. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  245. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  246. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  247. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  248. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  249. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  250. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  251. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  252. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  253. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  254. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  255. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  256. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  257. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  258. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  259. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  260. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  261. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  262. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  263. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  264. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  265. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  266. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  267. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  268. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  269. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  270. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  271. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  272. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  273. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  274. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  275. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  276. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  277. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/__init__.py +0 -0
  278. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/data/GridCal.ico +0 -0
  279. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/data/GridCal.svg +0 -0
  280. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/data/__init__.py +0 -0
  281. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/data/cables.csv +0 -0
  282. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/data/sequence_lines.csv +0 -0
  283. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/data/transformers.csv +0 -0
  284. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/data/wires.csv +0 -0
  285. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/plugins.py +0 -0
  286. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/templates.py +0 -0
  287. {gridcal-5.3.20 → gridcal-5.3.21}/GridCal/update.py +0 -0
  288. {gridcal-5.3.20 → gridcal-5.3.21}/setup.cfg +0 -0
  289. {gridcal-5.3.20 → gridcal-5.3.21}/setup.py +0 -0
@@ -79,7 +79,7 @@ class GridAnalysisGUI(QtWidgets.QMainWindow):
79
79
  fixable_err.fix(logger=logger,
80
80
  fix_ts=self.ui.fixTimeSeriesCheckBox.isChecked())
81
81
 
82
- if len(logger) > 0:
82
+ if logger.has_logs():
83
83
  dlg = LogsDialogue("Fixed issues", logger)
84
84
  dlg.setModal(True)
85
85
  dlg.exec()
@@ -101,20 +101,32 @@ class CoordinatesInputAssociations(QtCore.QAbstractTableModel):
101
101
 
102
102
  self.__headers = ['Name', 'Code', 'x', 'y', 'latitude', 'longitude']
103
103
 
104
+ def update(self):
105
+ """
106
+ update table
107
+ """
108
+ self.layoutAboutToBeChanged.emit()
109
+ self.layoutChanged.emit()
110
+
104
111
  def append(self, val: CoordinatesInputAssociation):
105
112
  self.__values.append(val)
113
+ self.update()
106
114
 
107
115
  def set_x_at(self, idx, value):
108
116
  self.__values[idx].x = value
117
+ self.update()
109
118
 
110
119
  def set_y_at(self, idx, value):
111
120
  self.__values[idx].y = value
121
+ self.update()
112
122
 
113
123
  def set_latitude_at(self, idx, value):
114
124
  self.__values[idx].latitude = value
125
+ self.update()
115
126
 
116
127
  def set_longitude_at(self, idx, value):
117
128
  self.__values[idx].longitude = value
129
+ self.update()
118
130
 
119
131
  def get_name_at(self, idx):
120
132
  return self.__values[idx].name
@@ -139,6 +151,7 @@ class CoordinatesInputAssociations(QtCore.QAbstractTableModel):
139
151
  self.__values[idx].y = 0
140
152
  self.__values[idx].latitude = 0
141
153
  self.__values[idx].longitude = 0
154
+ self.update()
142
155
 
143
156
  def rowCount(self, parent=None):
144
157
  return len(self.__values)
@@ -149,7 +162,6 @@ class CoordinatesInputAssociations(QtCore.QAbstractTableModel):
149
162
  def data(self, index, role=QtCore.Qt.ItemDataRole.DisplayRole):
150
163
  if index.isValid():
151
164
  if role == QtCore.Qt.ItemDataRole.DisplayRole:
152
- # return self.formatter(self._data[index.row(), index.column()])
153
165
  return str(self.__values[index.row()].get_at(index.column()))
154
166
  return None
155
167
 
@@ -394,7 +406,7 @@ class CoordinatesInputGUI(QtWidgets.QDialog):
394
406
  for hdr in duplicate_hdr:
395
407
  logger.add_error("Duplicated header", device=hdr)
396
408
 
397
- logs_dialogue = LogsDialogue(name="Duplictaed headers", logger=logger, expand_all=True)
409
+ logs_dialogue = LogsDialogue(name="Duplicated headers", logger=logger, expand_all=True)
398
410
  logs_dialogue.exec()
399
411
 
400
412
  # filter the headers
@@ -349,7 +349,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
349
349
  function_ptr=self.remove_function_from_schematic_and_db)
350
350
 
351
351
  add_menu_entry(menu=menu,
352
- text="Show diagram",
352
+ text="Substation diagram",
353
353
  icon_path=":/Icons/icons/grid_icon.svg",
354
354
  function_ptr=self.new_substation_diagram)
355
355
 
@@ -20,7 +20,7 @@ from PySide6.QtGui import (QIcon, QPixmap, QImage, QStandardItemModel, QStandard
20
20
  from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
21
21
  from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_segment import MapLineSegment
22
22
  from GridCal.Gui.SubstationDesigner.substation_designer import SubstationDesigner
23
- from GridCal.Gui.general_dialogues import CheckListDialogue, ElementsDialogue
23
+ from GridCal.Gui.general_dialogues import CheckListDialogue
24
24
  from GridCalEngine.Devices.Diagrams.map_location import MapLocation
25
25
  from GridCalEngine.Devices.Substation import Bus
26
26
  from GridCalEngine.Devices.Branches.line import Line, accept_line_connection
@@ -59,13 +59,13 @@ from GridCal.Gui.messages import error_msg, info_msg
59
59
 
60
60
  if TYPE_CHECKING:
61
61
  from GridCal.Gui.Main.SubClasses.Model.diagrams import DiagramsMain
62
+ from GridCal.Gui.Main.GridCalMain import GridCalMainGUI
62
63
 
63
64
  MAP_BRANCH_GRAPHIC_TYPES = Union[
64
65
  MapAcLine, MapDcLine, MapHvdcLine, MapFluidPathLine
65
66
  ]
66
67
 
67
68
 
68
-
69
69
  def haversine_distance(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
70
70
  """
71
71
 
@@ -213,16 +213,14 @@ class GridMapWidget(BaseDiagramWidget):
213
213
  """
214
214
 
215
215
  def __init__(self,
216
- gui: DiagramsMain,
216
+ gui: GridCalMainGUI | DiagramsMain,
217
217
  tile_src: Tiles,
218
218
  start_level: int,
219
219
  longitude: float,
220
220
  latitude: float,
221
221
  name: str,
222
222
  circuit: MultiCircuit,
223
- diagram: Union[None, MapDiagram] = None,
224
- call_delete_db_element_func: Callable[["GridMapWidget", ALL_DEV_TYPES], None] = None,
225
- call_new_substation_diagram_func: Callable[[Substation], None] = None, ):
223
+ diagram: Union[None, MapDiagram] = None):
226
224
  """
227
225
  GridMapWidget
228
226
  :param tile_src: Tiles instance
@@ -232,8 +230,6 @@ class GridMapWidget(BaseDiagramWidget):
232
230
  :param name: Name of the diagram
233
231
  :param circuit: MultiCircuit instance
234
232
  :param diagram: Diagram instance (optional)
235
- :param call_delete_db_element_func: function pointer to call on delete (optional)
236
- :param call_new_substation_diagram_func: function pointer to call on new_substation (optional)
237
233
  """
238
234
 
239
235
  super().__init__(
@@ -246,7 +242,6 @@ class GridMapWidget(BaseDiagramWidget):
246
242
  latitude=latitude) if diagram is None else diagram,
247
243
  library_model=MapLibraryModel(),
248
244
  time_index=None,
249
- call_delete_db_element_func=call_delete_db_element_func
250
245
  )
251
246
 
252
247
  # declare the map
@@ -260,9 +255,6 @@ class GridMapWidget(BaseDiagramWidget):
260
255
  # Any representation on the map must be done after this Goto Function
261
256
  self.map.go_to_level_and_position(level=6, longitude=longitude, latitude=latitude)
262
257
 
263
- # function pointer to call for a new substation diagram
264
- self.call_new_substation_diagram_func = call_new_substation_diagram_func
265
-
266
258
  # pool of runnable tasks that work best done asynch with a runnable
267
259
  self.thread_pool = QThreadPool()
268
260
  self.wheel_move_task: QRunnable | None = None
@@ -293,8 +285,7 @@ class GridMapWidget(BaseDiagramWidget):
293
285
  self.remove_from_scene(graphic_object)
294
286
 
295
287
  if propagate:
296
- if self.call_delete_db_element_func is not None:
297
- self.call_delete_db_element_func(self, device)
288
+ self.gui.call_delete_db_element(caller=self, api_obj=device)
298
289
 
299
290
  @property
300
291
  def name(self):
@@ -320,39 +311,37 @@ class GridMapWidget(BaseDiagramWidget):
320
311
  """
321
312
  return [(elm.api_object, elm) for elm in self.map.diagram_scene.selectedItems()]
322
313
 
323
-
324
- def get_selected_line_segments_tup(self) -> List[Tuple[Line, (MapAcLine,
314
+ def get_selected_line_segments_tup(self) -> List[Tuple[Line, (MapAcLine,
325
315
  MapDcLine,
326
316
  MapHvdcLine,
327
317
  MapFluidPathLine)]]:
328
- """
329
- Get only selected line segments from the scene
330
-
331
- :return: List of (Line, (MapAcLine, MapDcLine, MapHvdcLine, MapFluidPathLine)) tuples
332
- """
333
- selected_line_segments = []
334
- for item in self.map.diagram_scene.selectedItems():
335
- if (hasattr(item, 'api_object') and hasattr(item, 'container')
336
- and isinstance(item.container,
337
- (MapAcLine,
338
- MapDcLine,
339
- MapHvdcLine,
340
- MapFluidPathLine))):
341
- selected_line_segments.append((item.api_object, item.container))
342
- return selected_line_segments
318
+ """
319
+ Get only selected line segments from the scene
320
+
321
+ :return: List of (Line, (MapAcLine, MapDcLine, MapHvdcLine, MapFluidPathLine)) tuples
322
+ """
323
+ selected_line_segments = []
324
+ for item in self.map.diagram_scene.selectedItems():
325
+ if (hasattr(item, 'api_object') and hasattr(item, 'container')
326
+ and isinstance(item.container,
327
+ (MapAcLine,
328
+ MapDcLine,
329
+ MapHvdcLine,
330
+ MapFluidPathLine))):
331
+ selected_line_segments.append((item.api_object, item.container))
332
+ return selected_line_segments
343
333
 
344
334
  def get_selected_substations_tup(self) -> List[Tuple[Substation, SubstationGraphicItem]]:
345
- """
346
- Get only selected substations from the scene
347
-
348
- :return: List of (Substation, SubstationGraphicItem) tuples
349
- """
350
- selected_substations = []
351
- for item in self.map.diagram_scene.selectedItems():
352
- if hasattr(item, 'api_object') and isinstance(item, SubstationGraphicItem):
353
- selected_substations.append((item.api_object, item))
354
- return selected_substations
335
+ """
336
+ Get only selected substations from the scene
355
337
 
338
+ :return: List of (Substation, SubstationGraphicItem) tuples
339
+ """
340
+ selected_substations = []
341
+ for item in self.map.diagram_scene.selectedItems():
342
+ if hasattr(item, 'api_object') and isinstance(item, SubstationGraphicItem):
343
+ selected_substations.append((item.api_object, item))
344
+ return selected_substations
356
345
 
357
346
  def add_to_scene(self, graphic_object: ALL_MAP_GRAPHICS = None) -> None:
358
347
  """
@@ -563,13 +552,10 @@ class GridMapWidget(BaseDiagramWidget):
563
552
  delete_from_db: bool = False):
564
553
  """
565
554
 
566
-
567
555
  :param api_object: Substation object from the MultiCircuit
568
556
  :param substation_buses: List of buses associated to this substation
569
557
  :param voltage_levels: List of voltage levels associated to this substation
570
558
  :param delete_from_db: Does it remove the objects from the Database too (bool)
571
-
572
-
573
559
  """
574
560
 
575
561
  # Remove from graphics manager and scene
@@ -591,19 +577,19 @@ class GridMapWidget(BaseDiagramWidget):
591
577
  # Delete buses associated with this substation
592
578
  for bus in substation_buses:
593
579
  self.circuit.delete_bus(bus, delete_associated=True)
594
-
580
+
595
581
  # Delete voltage levels associated with this substation
596
582
  for vl in voltage_levels:
597
583
  self.circuit.delete_voltage_level(vl)
598
-
584
+
599
585
  # Delete the substation itself
600
586
  self.circuit.delete_substation(obj=api_object)
601
587
 
602
- def show_devices_to_disconnect_dialog(self,
603
- devices: List[ALL_DEV_TYPES],
604
- buses: List[Bus],
605
- voltage_levels: List[VoltageLevel],
606
- dialog_title: str):
588
+ def show_devices_to_disconnect_dialog(self,
589
+ devices: List[ALL_DEV_TYPES],
590
+ buses: List[Bus],
591
+ voltage_levels: List[VoltageLevel],
592
+ dialog_title: str):
607
593
  """
608
594
  Show a dialog with the list of all devices that will be disconnected
609
595
 
@@ -614,38 +600,38 @@ class GridMapWidget(BaseDiagramWidget):
614
600
  """
615
601
  from GridCal.Gui.general_dialogues import ElementsDialogue
616
602
  from GridCalEngine.Devices.Parents.editable_device import GCProp
617
-
603
+
618
604
  # Combine all devices
619
605
  all_devices = devices + buses + voltage_levels
620
-
606
+
621
607
  if not all_devices:
622
608
  info_msg('No devices to disconnect', dialog_title)
623
609
  return
624
-
610
+
625
611
  # Create custom properties for name, type, and ID tag
626
- name_prop = GCProp(prop_name='name', tpe=str, units='', definition='Device name',
627
- display=True, editable=False)
628
-
629
- type_prop = GCProp(prop_name='device_type', tpe=DeviceType, units='', definition='Device type',
612
+ name_prop = GCProp(prop_name='name', tpe=str, units='', definition='Device name',
630
613
  display=True, editable=False)
631
-
632
- idtag_prop = GCProp(prop_name='idtag', tpe=str, units='', definition='ID tag',
614
+
615
+ type_prop = GCProp(prop_name='device_type', tpe=DeviceType, units='', definition='Device type',
633
616
  display=True, editable=False)
634
-
617
+
618
+ idtag_prop = GCProp(prop_name='idtag', tpe=str, units='', definition='ID tag',
619
+ display=True, editable=False)
620
+
635
621
  custom_props = [name_prop, type_prop, idtag_prop]
636
-
622
+
637
623
  # Create and show the dialog
638
624
  dialog = ElementsDialogue(name=dialog_title, elements=all_devices)
639
-
625
+
640
626
  # Replace the model with our custom one that only shows name, type, and idtag
641
627
  model = ObjectsModel(objects=all_devices,
642
- time_index=None,
643
- property_list=custom_props,
644
- parent=dialog.objects_table,
645
- editable=False)
646
-
628
+ time_index=None,
629
+ property_list=custom_props,
630
+ parent=dialog.objects_table,
631
+ editable=False)
632
+
647
633
  dialog.objects_table.setModel(model)
648
-
634
+
649
635
  # Make the dialog modal so the user must acknowledge it before continuing
650
636
  dialog.setModal(True)
651
637
  dialog.exec()
@@ -668,6 +654,7 @@ class GridMapWidget(BaseDiagramWidget):
668
654
 
669
655
  for lineloc in lin.nodes_list:
670
656
  self.map.diagram_scene.removeItem(lineloc)
657
+
671
658
  def delete_Selected_from_widget(self, delete_from_db: bool) -> None:
672
659
  """
673
660
  Delete the selected items from the diagram
@@ -1073,7 +1060,6 @@ class GridMapWidget(BaseDiagramWidget):
1073
1060
  for key, elm_graphics in graphics_dict.items():
1074
1061
  elm_graphics.resize(new_radius=branch_width)
1075
1062
 
1076
-
1077
1063
  # rescale substations (this is super-fast)
1078
1064
  data: Dict[str, SubstationGraphicItem] = self.graphics_manager.get_device_type_dict(DeviceType.SubstationDevice)
1079
1065
  for se_key, elm_graphics in data.items():
@@ -1192,20 +1178,19 @@ class GridMapWidget(BaseDiagramWidget):
1192
1178
  # voltage_cmap = viz.get_voltage_color_map()
1193
1179
  loading_cmap = viz.get_loading_color_map()
1194
1180
 
1195
- nbus = self.circuit.get_bus_number()
1196
-
1197
- longitudes = np.zeros(nbus)
1198
- latitudes = np.zeros(nbus)
1199
- nodes_dict = dict()
1200
- for i, bus in enumerate(self.circuit.buses):
1201
-
1202
- # try to find the diagram object of the DB object
1203
- graphic_object = self.graphics_manager.query(bus)
1204
-
1205
- if graphic_object:
1206
- longitudes[i] = bus.longitude
1207
- latitudes[i] = bus.latitude
1208
- nodes_dict[bus.name] = (bus.latitude, bus.longitude)
1181
+ # nbus = self.circuit.get_bus_number()
1182
+ # longitudes = np.zeros(nbus)
1183
+ # latitudes = np.zeros(nbus)
1184
+ # nodes_dict = dict()
1185
+ # for i, bus in enumerate(self.circuit.buses):
1186
+ #
1187
+ # # try to find the diagram object of the DB object
1188
+ # graphic_object = self.graphics_manager.query(bus)
1189
+ #
1190
+ # if graphic_object:
1191
+ # longitudes[i] = bus.longitude
1192
+ # latitudes[i] = bus.latitude
1193
+ # nodes_dict[bus.name] = (bus.latitude, bus.longitude)
1209
1194
 
1210
1195
  arrow_size = self.diagram.arrow_size # self.get_arrow_scale()
1211
1196
 
@@ -1256,12 +1241,11 @@ class GridMapWidget(BaseDiagramWidget):
1256
1241
  style = Qt.PenStyle.SolidLine
1257
1242
  if use_flow_based_width:
1258
1243
  weight = int(
1259
- np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1))
1260
- else:
1261
- weight = self.get_branch_width()
1244
+ np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1)
1245
+ )
1246
+ graphic_object.set_width_scale(width=weight, arrow_width=arrow_size)
1262
1247
 
1263
1248
  graphic_object.set_colour(color=color, style=style, tool_tip=tooltip)
1264
- graphic_object.set_width_scale(width=weight, arrow_width=arrow_size)
1265
1249
 
1266
1250
  if hasattr(graphic_object, 'set_arrows_with_power'):
1267
1251
  graphic_object.set_arrows_with_power(
@@ -1319,8 +1303,7 @@ class GridMapWidget(BaseDiagramWidget):
1319
1303
  weight = int(
1320
1304
  np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1)
1321
1305
  )
1322
- else:
1323
- weight = self.get_branch_width()
1306
+ graphic_object.set_width_scale(width=weight, arrow_width=arrow_size)
1324
1307
 
1325
1308
  tooltip = str(i) + ': ' + graphic_object.api_object.name
1326
1309
  tooltip += '\n' + loading_label + ': ' + "{:10.4f}".format(
@@ -1336,7 +1319,6 @@ class GridMapWidget(BaseDiagramWidget):
1336
1319
  graphic_object.set_arrows_with_hvdc_power(Pf=float(hvdc_Pf[i]), Pt=-hvdc_Pf[i])
1337
1320
 
1338
1321
  graphic_object.set_colour(color=color, style=style, tool_tip=tooltip)
1339
- graphic_object.set_width_scale(width=weight, arrow_width=arrow_size)
1340
1322
 
1341
1323
  if fluid_path_flow is not None:
1342
1324
 
@@ -1377,10 +1359,7 @@ class GridMapWidget(BaseDiagramWidget):
1377
1359
  :param substation:
1378
1360
  :return:
1379
1361
  """
1380
- if self.call_new_substation_diagram_func is not None:
1381
- self.call_new_substation_diagram_func(substation)
1382
- else:
1383
- print("call_new_substation_diagram_func is None :( ")
1362
+ self.gui.new_bus_branch_diagram_from_substation([substation])
1384
1363
 
1385
1364
  def copy(self) -> "GridMapWidget":
1386
1365
  """
@@ -1402,8 +1381,6 @@ class GridMapWidget(BaseDiagramWidget):
1402
1381
  name=self.diagram.name,
1403
1382
  circuit=self.circuit,
1404
1383
  diagram=self.diagram,
1405
- call_new_substation_diagram_func=self.call_new_substation_diagram_func,
1406
- call_delete_db_element_func=self.call_delete_db_element_func
1407
1384
  )
1408
1385
 
1409
1386
  def consolidate_coordinates(self):
@@ -1416,12 +1393,10 @@ class GridMapWidget(BaseDiagramWidget):
1416
1393
  device_type=DeviceType.LineLocation)
1417
1394
 
1418
1395
  for gelm in graphics_substations:
1419
-
1420
1396
  gelm.api_object.latitude = gelm.lat
1421
1397
  gelm.api_object.longitude = gelm.lon
1422
1398
 
1423
1399
  for gelm in graphics_linelocations:
1424
-
1425
1400
  gelm.api_object.lat = gelm.lat
1426
1401
  gelm.api_object.long = gelm.lon
1427
1402
 
@@ -1546,7 +1521,8 @@ class GridMapWidget(BaseDiagramWidget):
1546
1521
  msg = QMessageBox()
1547
1522
  msg.setIcon(QMessageBox.Icon.Warning)
1548
1523
  msg.setText(f"No suitable voltage level ({vnom:.2f} kV) found in substation \"{substation_api.name}\".")
1549
- msg.setInformativeText("The line cannot be connected. Please ensure the target substation has a bus with a matching nominal voltage.")
1524
+ msg.setInformativeText(
1525
+ "The line cannot be connected. Please ensure the target substation has a bus with a matching nominal voltage.")
1550
1526
  msg.setWindowTitle("Connection Error")
1551
1527
  msg.exec()
1552
1528
  return
@@ -1694,7 +1670,7 @@ class GridMapWidget(BaseDiagramWidget):
1694
1670
 
1695
1671
  # Preserve waypoints for line 1 (from start to insertion point)
1696
1672
  # Add all waypoints from the original line up to the closest segment
1697
- for i in range(1, closest_segment_idx + 1):
1673
+ for i in range(1, closest_segment_idx + 1):
1698
1674
  line1.locations.add_location(lat=waypoints[i][0], long=waypoints[i][1], alt=0.0)
1699
1675
 
1700
1676
  # --- Assign offset waypoints ---
@@ -1727,8 +1703,9 @@ class GridMapWidget(BaseDiagramWidget):
1727
1703
  line1.update_length()
1728
1704
  line2.update_length()
1729
1705
 
1730
- self.notify(f'{line1.name} ({line1.length:.3f}km) and {line2.name} ({line2.length:.3f}km) created. {line_api.name} removed.')
1731
-
1706
+ self.gui.show_info_toast(
1707
+ f'{line1.name} ({line1.length:.3f}km) and {line2.name} ({line2.length:.3f}km) created. {line_api.name} removed.'
1708
+ )
1732
1709
 
1733
1710
  def _closest_point_on_segment(self, lat1, lon1, lat2, lon2, lat3, lon3):
1734
1711
  """
@@ -1928,9 +1905,9 @@ class GridMapWidget(BaseDiagramWidget):
1928
1905
  if suitable_bus_in_selected is None:
1929
1906
  # Find or create a voltage level with the appropriate voltage in the selected substation
1930
1907
  voltage_level_in_selected = None
1931
- for vl in substation_api.voltage_levels:
1932
- if abs(vl.nominal_voltage - vnom) < 0.01:
1933
- voltage_level_in_selected = vl
1908
+ for vl_graphic in substation_graphic.voltage_level_graphics:
1909
+ if abs(vl_graphic.api_object.Vnom - vnom) < 0.01:
1910
+ voltage_level_in_selected = vl_graphic.api_object
1934
1911
  break
1935
1912
 
1936
1913
  if voltage_level_in_selected is None:
@@ -2212,7 +2189,6 @@ class GridMapWidget(BaseDiagramWidget):
2212
2189
  bus_to = line_api.bus_to
2213
2190
  bus_to_idtag_0 = bus_to.idtag
2214
2191
 
2215
-
2216
2192
  buses1 = self.circuit.get_substation_buses(substation=substation_api_1)
2217
2193
  buses2 = self.circuit.get_substation_buses(substation=substation_api_2)
2218
2194
 
@@ -2285,7 +2261,6 @@ class GridMapWidget(BaseDiagramWidget):
2285
2261
  msg.exec()
2286
2262
  return
2287
2263
 
2288
-
2289
2264
  # Remove past graphic item and add the new one
2290
2265
 
2291
2266
  self.remove_branch_graphic(line=line_graphic, delete_from_db=False)
@@ -2298,6 +2273,7 @@ class GridMapWidget(BaseDiagramWidget):
2298
2273
  msg.setWindowTitle("Operation Successful")
2299
2274
  msg.exec()
2300
2275
 
2276
+
2301
2277
  def generate_map_diagram(
2302
2278
  substations: List[Substation],
2303
2279
  voltage_levels: List[VoltageLevel],
@@ -10,6 +10,7 @@ from PySide6.QtCore import Qt
10
10
  from PySide6.QtGui import QIcon, QPixmap
11
11
  from PySide6.QtWidgets import QMenu, QLabel, QDoubleSpinBox, QPushButton, QVBoxLayout, QComboBox, QDialog
12
12
  from GridCal.Gui.gui_functions import get_list_model, add_menu_entry
13
+ from GridCal.Gui.messages import warning_msg
13
14
  from GridCal.Gui.Diagrams.SchematicWidget.terminal_item import BarTerminalItem, RoundTerminalItem
14
15
  from GridCalEngine.Devices.Branches.line import SequenceLineType, OverheadLineType, UndergroundLineType
15
16
  from GridCalEngine.Devices.Branches.dc_line import DcLine
@@ -86,8 +87,12 @@ class DcLineEditor(QDialog):
86
87
  R = self.current_template.R
87
88
 
88
89
  elif isinstance(self.current_template, OverheadLineType):
89
- I = self.current_template.Imax[0]
90
- R, X1, B1 = self.current_template.get_sequence_values(0, 1)
90
+ if self.current_template.check():
91
+ I = self.current_template.Imax[0]
92
+ R, X1, B1, I_kA = self.current_template.get_sequence_values(0, 1)
93
+ else:
94
+ warning_msg(text=f"The template {self.current_template.name} contains errors",
95
+ title="Load template")
91
96
 
92
97
  except:
93
98
  pass
@@ -198,12 +203,17 @@ class DcLineEditor(QDialog):
198
203
  self.selected_template = template
199
204
 
200
205
  elif isinstance(template, OverheadLineType):
201
- R1, X1, B1 = template.get_sequence_values(0, 1)
206
+ if self.current_template.check():
207
+ R, X1, B1, I_kA = self.current_template.get_sequence_values(circuit_idx=0, seq=1)
208
+ self.i_spinner.setValue(I_kA)
209
+ self.r_spinner.setValue(R)
210
+
211
+ self.selected_template = template
212
+ else:
213
+ warning_msg(text=f"The template {self.current_template.name} contains errors",
214
+ title="Load template")
202
215
 
203
- self.i_spinner.setValue(template.Imax[0])
204
- self.r_spinner.setValue(R1)
205
216
 
206
- self.selected_template = template
207
217
 
208
218
  def load_template_btn_click(self):
209
219
  """
@@ -7,6 +7,7 @@ from __future__ import annotations
7
7
  import numpy as np
8
8
 
9
9
  from typing import Union, List
10
+ from GridCal.Gui.messages import warning_msg
10
11
  from PySide6.QtCore import Qt
11
12
  from PySide6.QtWidgets import QPushButton, QVBoxLayout, QDialog, QLabel, QDoubleSpinBox, QComboBox, QCheckBox
12
13
  from GridCal.Gui.gui_functions import get_list_model
@@ -105,12 +106,20 @@ class LineEditor(QDialog):
105
106
  b_us = self.current_template.B
106
107
 
107
108
  elif isinstance(self.current_template, OverheadLineType):
108
- R1, X1, Bsh1 = self.current_template.get_sequence_values(circuit_idx=self.line.circuit_idx,
109
- seq=1)
110
- I_KA = self.current_template.Imax[self.line.circuit_idx]
111
- r_ohm = R1
112
- x_ohm = X1
113
- b_us = Bsh1
109
+
110
+ if self.current_template.check():
111
+ R1, X1, Bsh1, I_kA = self.current_template.get_sequence_values(
112
+ circuit_idx=self.line.circuit_idx,
113
+ seq=1
114
+ )
115
+ r_ohm = R1
116
+ x_ohm = X1
117
+ b_us = Bsh1
118
+ else:
119
+ warning_msg(text=f"The template {self.current_template.name} contains errors",
120
+ title="Load template")
121
+
122
+
114
123
 
115
124
  except ValueError:
116
125
  pass
@@ -257,11 +266,18 @@ class LineEditor(QDialog):
257
266
  self.selected_template = template
258
267
 
259
268
  elif isinstance(template, OverheadLineType):
260
- R1, X1, Bsh1 = template.get_sequence_values(circuit_idx=self.line.circuit_idx, seq=1)
261
- self.i_spinner.setValue(template.Imax[self.line.circuit_idx])
262
- self.r_spinner.setValue(R1)
263
- self.x_spinner.setValue(X1)
264
- self.b_spinner.setValue(Bsh1)
269
+ if self.current_template.check():
270
+ R1, X1, Bsh1, I_kA = self.current_template.get_sequence_values(
271
+ circuit_idx=self.line.circuit_idx,
272
+ seq=1
273
+ )
274
+ self.i_spinner.setValue(I_kA)
275
+ self.r_spinner.setValue(R1)
276
+ self.x_spinner.setValue(X1)
277
+ self.b_spinner.setValue(Bsh1)
278
+ else:
279
+ warning_msg(text=f"The template {self.current_template.name} contains errors",
280
+ title="Load template")
265
281
 
266
282
  self.selected_template = template
267
283