GridCal 5.3.34__tar.gz → 5.3.36__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 (301) hide show
  1. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CascadingSteps/gui.py +1 -1
  2. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections → gridcal-5.3.36/GridCal/Gui/Diagrams/Editors}/controllable_shunt_editor.py +1 -0
  3. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections → gridcal-5.3.36/GridCal/Gui/Diagrams/Editors}/generator_editor.py +1 -1
  4. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Branches → gridcal-5.3.36/GridCal/Gui/Diagrams/Editors}/line_editor.py +58 -14
  5. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Branches → gridcal-5.3.36/GridCal/Gui/Diagrams/Editors}/transformer3w_editor.py +20 -16
  6. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +24 -39
  7. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +4 -0
  8. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +4 -0
  9. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +3 -0
  10. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +4 -0
  11. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +48 -30
  12. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +67 -52
  13. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +22 -5
  14. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +56 -26
  15. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +19 -23
  16. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +1 -1
  17. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +1 -1
  18. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +554 -197
  19. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +5 -1
  20. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +5 -1
  21. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +6 -27
  22. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +37 -23
  23. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +5 -1
  24. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +5 -1
  25. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +7 -3
  26. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +34 -33
  27. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +5 -1
  28. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +5 -1
  29. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +16 -11
  30. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +53 -26
  31. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +84 -0
  32. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +9 -5
  33. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +85 -0
  34. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +11 -81
  35. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +36 -0
  36. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +94 -0
  37. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +40 -0
  38. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +39 -0
  39. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +14 -126
  40. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +288 -0
  41. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +47 -0
  42. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +35 -0
  43. gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +38 -0
  44. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +125 -110
  45. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +65 -55
  46. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +72 -55
  47. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +119 -157
  48. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +26 -6
  49. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/base_diagram_widget.py +168 -5
  50. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/generic_graphics.py +193 -92
  51. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/graphics_manager.py +1 -1
  52. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/demo_code.py +1 -1
  53. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/MainWindow.py +337 -337
  54. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +71 -52
  55. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Model/objects.py +10 -10
  56. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Model/time_events.py +1 -1
  57. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Results/results.py +10 -12
  58. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +2 -2
  59. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +2 -0
  60. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/base_gui.py +1 -1
  61. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/io.py +2 -2
  62. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/simulations.py +5 -5
  63. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ProfilesInput/profile_dialogue.py +1 -1
  64. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/RosetaExplorer/MainWindow.py +1 -1
  65. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SyncDialogue/gui.py +1 -1
  66. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SyncDialogue/sync_dialogue.py +2 -2
  67. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +2 -2
  68. gridcal-5.3.36/GridCal/Gui/Widgets/__init__.py +0 -0
  69. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/general_dialogues.py +93 -0
  70. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/object_model.py +1 -1
  71. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/profiles_model.py +1 -1
  72. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Session/server_driver.py +1 -1
  73. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Session/session.py +1 -1
  74. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/__init__.py +1 -1
  75. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +2 -2
  76. gridcal-5.3.36/GridCal/ThirdParty/qdarktheme/_resources/svg.py +26 -0
  77. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/__version__.py +1 -1
  78. {gridcal-5.3.34 → gridcal-5.3.36}/PKG-INFO +1 -1
  79. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -154
  80. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -160
  81. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -149
  82. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -180
  83. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -160
  84. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -160
  85. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -171
  86. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -142
  87. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -163
  88. gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -158
  89. gridcal-5.3.34/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -26
  90. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ExecuteGridCal.py +0 -0
  91. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  92. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  93. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  94. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  95. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  96. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  97. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Analysis/__init__.py +0 -0
  98. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Analysis/gui.py +0 -0
  99. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  100. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  101. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  102. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  103. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  104. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  105. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  106. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  107. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  108. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  109. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  110. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  111. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  112. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  113. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  114. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  115. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Fluid → gridcal-5.3.36/GridCal/Gui/Diagrams/Editors}/__init__.py +0 -0
  116. {gridcal-5.3.34/GridCal/Gui/Diagrams/MapWidget/Branches → gridcal-5.3.36/GridCal/Gui/Diagrams/Editors}/new_line_dialogue.py +0 -0
  117. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Branches → gridcal-5.3.36/GridCal/Gui/Diagrams/Editors}/transformer_editor.py +0 -0
  118. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Branches → gridcal-5.3.36/GridCal/Gui/Diagrams/Editors}/transformer_taps_editor.py +0 -0
  119. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  120. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  121. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  122. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  123. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  124. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  125. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  126. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  127. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  128. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  129. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  130. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  131. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  132. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Injections → gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Fluid}/__init__.py +0 -0
  133. {gridcal-5.3.34/GridCal/Gui/Diagrams/SchematicWidget/Substation → gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Injections}/__init__.py +0 -0
  134. {gridcal-5.3.34/GridCal/Gui/GridMerge → gridcal-5.3.36/GridCal/Gui/Diagrams/SchematicWidget/Substation}/__init__.py +0 -0
  135. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  136. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  137. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/__init__.py +0 -0
  138. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  139. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  140. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  141. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridGenerator/gui.py +0 -0
  142. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  143. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  144. {gridcal-5.3.34/GridCal/Gui/ProfilesInput → gridcal-5.3.36/GridCal/Gui/GridMerge}/__init__.py +0 -0
  145. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
  146. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
  147. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
  148. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
  149. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
  150. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
  151. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
  152. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
  153. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  154. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  155. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  156. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  157. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  158. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  159. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  160. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  161. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  162. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  163. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  164. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  165. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/GridCalMain.py +0 -0
  166. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  167. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  168. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  169. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  170. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  171. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  172. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  173. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  174. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  175. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/__init__.py +0 -0
  176. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/icons_rc.py +0 -0
  177. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/object_select_window.py +0 -0
  178. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Main/update_gui_file.py +0 -0
  179. {gridcal-5.3.34/GridCal/Gui/SolarPowerWizard → gridcal-5.3.36/GridCal/Gui/ProfilesInput}/__init__.py +0 -0
  180. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  181. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  182. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  183. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  184. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  185. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  186. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  187. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  188. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  189. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  190. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  191. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  192. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  193. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  194. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  195. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  196. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  197. {gridcal-5.3.34/GridCal/Gui/Widgets → gridcal-5.3.36/GridCal/Gui/SolarPowerWizard}/__init__.py +0 -0
  198. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  199. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  200. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  201. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  202. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  203. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  204. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  205. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  206. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  207. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  208. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  209. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  210. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  211. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  212. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  213. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  214. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  215. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  216. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  217. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
  218. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  219. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  220. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  221. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  222. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  223. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  224. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Visualization/__init__.py +0 -0
  225. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Visualization/visualization.py +0 -0
  226. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  227. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  228. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  229. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  230. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  231. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  232. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  233. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/__init__.py +0 -0
  234. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/associations_model.py +0 -0
  235. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/gui_functions.py +0 -0
  236. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/messages.py +0 -0
  237. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/pandas_model.py +0 -0
  238. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/plot_config.py +0 -0
  239. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/python_console.py +0 -0
  240. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/python_highlighter.py +0 -0
  241. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/results_model.py +0 -0
  242. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/table_view_header_wrap.py +0 -0
  243. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/themes.py +0 -0
  244. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/toast_widget.py +0 -0
  245. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/update_gui_all.py +0 -0
  246. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/update_gui_common.py +0 -0
  247. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Gui/wrappable_table_model.py +0 -0
  248. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/LICENSE.txt +0 -0
  249. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Session/__init__.py +0 -0
  250. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Session/export_results_driver.py +0 -0
  251. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Session/file_handler.py +0 -0
  252. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/Session/synchronization_driver.py +0 -0
  253. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/__init__.py +0 -0
  254. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  255. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  256. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  257. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  258. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  259. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  260. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  261. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  262. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  263. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  264. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  265. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  266. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  267. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  268. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  269. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  270. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  271. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  272. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  273. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  274. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  275. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  276. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  277. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  278. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  279. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  280. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  281. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  282. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  283. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  284. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  285. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  286. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  287. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  288. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  289. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/__init__.py +0 -0
  290. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/data/GridCal.ico +0 -0
  291. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/data/GridCal.svg +0 -0
  292. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/data/__init__.py +0 -0
  293. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/data/cables.csv +0 -0
  294. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/data/sequence_lines.csv +0 -0
  295. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/data/transformers.csv +0 -0
  296. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/data/wires.csv +0 -0
  297. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/plugins.py +0 -0
  298. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/templates.py +0 -0
  299. {gridcal-5.3.34 → gridcal-5.3.36}/GridCal/update.py +0 -0
  300. {gridcal-5.3.34 → gridcal-5.3.36}/setup.cfg +0 -0
  301. {gridcal-5.3.34 → gridcal-5.3.36}/setup.py +0 -0
@@ -71,7 +71,7 @@ class Ui_Dialog(object):
71
71
  self.clear_cascade_pushButton = QPushButton(self.frame_11)
72
72
  self.clear_cascade_pushButton.setObjectName(u"clear_cascade_pushButton")
73
73
  icon3 = QIcon()
74
- icon3.addFile(u":/Icons/icons/delete.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
74
+ icon3.addFile(u":/Icons/icons/delete_with_dialogue.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
75
75
  self.clear_cascade_pushButton.setIcon(icon3)
76
76
 
77
77
  self.horizontalLayout_3.addWidget(self.clear_cascade_pushButton)
@@ -85,6 +85,7 @@ class ControllableShuntEditor(QDialog):
85
85
 
86
86
  self.setLayout(layout)
87
87
 
88
+
88
89
  def get_active_steps(self) -> np.ndarray:
89
90
  """
90
91
 
@@ -249,7 +249,7 @@ class GeneratorQCurveEditor(QDialog):
249
249
  row = selected_indexes[0].row()
250
250
  self.table_model.delRow(row)
251
251
  else:
252
- # if no selection, delete the last row
252
+ # if no selection, delete_with_dialogue the last row
253
253
  self.table_model.delLastRow()
254
254
 
255
255
  def sort(self):
@@ -7,11 +7,10 @@ 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
11
10
  from PySide6.QtCore import Qt
12
11
  from PySide6.QtWidgets import QPushButton, QVBoxLayout, QDialog, QLabel, QDoubleSpinBox, QComboBox, QCheckBox
13
12
  from GridCal.Gui.gui_functions import get_list_model
14
- from GridCal.Gui.messages import error_msg
13
+ from GridCal.Gui.messages import error_msg, warning_msg, yes_no_question
15
14
  from GridCalEngine.Devices.Branches.line import Line, SequenceLineType, OverheadLineType, UndergroundLineType
16
15
 
17
16
 
@@ -169,6 +168,17 @@ class LineEditor(QDialog):
169
168
  self.b_spinner.setValue(b_us)
170
169
  self.b_spinner.setSuffix(" uS/Km")
171
170
 
171
+ # Circuit Index
172
+ max_circuits = 0
173
+ if isinstance(self.current_template, OverheadLineType):
174
+ max_circuits = self.current_template.n_circuits
175
+ self.circuit_idx = QDoubleSpinBox()
176
+ self.circuit_idx.setMinimum(1)
177
+ self.circuit_idx.setMaximum(max_circuits)
178
+ self.circuit_idx.setDecimals(0)
179
+ self.circuit_idx.setValue(float(self.line.circuit_idx))
180
+ self.circuit_idx.setSuffix("")
181
+
172
182
  # apply to profile
173
183
  self.apply_to_profile = QCheckBox()
174
184
  self.apply_to_profile.setToolTip("Apply the newly computed values like the rating to the profile")
@@ -184,6 +194,9 @@ class LineEditor(QDialog):
184
194
  if templates is not None:
185
195
  self.layout.addWidget(QLabel("Available templates"))
186
196
  self.layout.addWidget(self.catalogue_combo)
197
+ self.catalogue_combo.currentIndexChanged.connect(self.update_max_circuits)
198
+ self.layout.addWidget((QLabel("Circuit index:")))
199
+ self.layout.addWidget(self.circuit_idx)
187
200
  self.layout.addWidget(self.load_template_btn)
188
201
  self.layout.addWidget(QLabel(""))
189
202
 
@@ -223,22 +236,35 @@ class LineEditor(QDialog):
223
236
  if self.selected_template is not None:
224
237
  self.line.disable_auto_updates()
225
238
  self.line.set_length(val=length)
239
+ self.line.set_circuit_idx(val=int(self.circuit_idx.value()), obj=self.selected_template)
226
240
  self.line.apply_template(obj=self.selected_template, Sbase=self.Sbase, freq=self.frequency)
227
241
  self.line.enable_auto_updates()
242
+ self.accept()
228
243
  else:
229
- wf = 2 * np.pi * self.frequency
230
- self.line.fill_design_properties(
231
- r_ohm=self.r_spinner.value(), # ohm / km
232
- x_ohm=self.x_spinner.value(), # ohm / km
233
- c_nf=self.b_spinner.value() * 1e3 / wf, # nF / km
234
- length=length, # km
235
- Imax=self.i_spinner.value(), # KA
236
- freq=self.frequency, # Hz
237
- Sbase=self.Sbase, # MVA
238
- apply_to_profile=self.apply_to_profile.isChecked()
244
+ response = yes_no_question(
245
+ text="Warning: You did not load template values. The circuit index will not be updated. "
246
+ "Line parameters will be based on the provided values for Length, Max Current, Resistance, "
247
+ "Reactance, and Susceptance.\n\n"
248
+ "Do you want to continue without a template?",
249
+ title="No Template Selected"
239
250
  )
240
251
 
241
- self.accept()
252
+ if response: # User selected Yes
253
+ wf = 2 * np.pi * self.frequency
254
+ self.line.fill_design_properties(
255
+ r_ohm=self.r_spinner.value(), # ohm / km
256
+ x_ohm=self.x_spinner.value(), # ohm / km
257
+ c_nf=self.b_spinner.value() * 1e3 / wf, # nF / km
258
+ length=length, # km
259
+ Imax=self.i_spinner.value(), # KA
260
+ freq=self.frequency, # Hz
261
+ Sbase=self.Sbase, # MVA
262
+ apply_to_profile=self.apply_to_profile.isChecked()
263
+ )
264
+ self.accept()
265
+ else:
266
+ # User canceled, do nothing
267
+ return
242
268
  else:
243
269
  error_msg(text="The length cannot be 0!", title="Accept line design values")
244
270
 
@@ -268,13 +294,14 @@ class LineEditor(QDialog):
268
294
  elif isinstance(template, OverheadLineType):
269
295
  if self.current_template.check():
270
296
  R1, X1, Bsh1, I_kA = self.current_template.get_sequence_values(
271
- circuit_idx=self.line.circuit_idx,
297
+ circuit_idx=int(self.circuit_idx.value()),
272
298
  seq=1
273
299
  )
274
300
  self.i_spinner.setValue(I_kA)
275
301
  self.r_spinner.setValue(R1)
276
302
  self.x_spinner.setValue(X1)
277
303
  self.b_spinner.setValue(Bsh1)
304
+ self.circuit_idx.setMaximum(self.current_template.n_circuits)
278
305
  else:
279
306
  warning_msg(text=f"The template {self.current_template.name} contains errors",
280
307
  title="Load template")
@@ -291,3 +318,20 @@ class LineEditor(QDialog):
291
318
 
292
319
  if idx > -1:
293
320
  self.load_template(template=self.templates[idx])
321
+
322
+ def update_max_circuits(self):
323
+ """
324
+ Update the maximum number of circuits
325
+ :return:
326
+ """
327
+
328
+ if self.templates is not None:
329
+ idx = self.catalogue_combo.currentIndex()
330
+
331
+ if idx > -1:
332
+ template = self.templates[idx]
333
+
334
+ if isinstance(template, OverheadLineType):
335
+ self.circuit_idx.setMaximum(template.n_circuits)
336
+ else:
337
+ self.circuit_idx.setMaximum(1)
@@ -92,7 +92,7 @@ class Transformer3WEditor(QDialog):
92
92
  super(Transformer3WEditor, self).__init__()
93
93
 
94
94
  # keep pointer to the line object
95
- self.transformer_obj = tr3
95
+ self._api_object = tr3
96
96
 
97
97
  self.Sbase = Sbase
98
98
 
@@ -159,6 +159,10 @@ class Transformer3WEditor(QDialog):
159
159
 
160
160
  self.setWindowTitle('Transformer editor')
161
161
 
162
+ @property
163
+ def api_object(self) -> Transformer3W:
164
+ return self._api_object
165
+
162
166
  def accept_click(self):
163
167
  """
164
168
  Create transformer type and get the impedances
@@ -166,21 +170,21 @@ class Transformer3WEditor(QDialog):
166
170
  """
167
171
 
168
172
  if self.modify_on_accept:
169
- self.transformer_obj.fill_from_design_values(V1=self.w1.vn_spinner.value(),
170
- V2=self.w2.vn_spinner.value(),
171
- V3=self.w3.vn_spinner.value(),
172
- Sn1=self.w1.sn_spinner.value(),
173
- Sn2=self.w2.sn_spinner.value(),
174
- Sn3=self.w3.sn_spinner.value(),
175
- Pcu12=self.w1.pcu_spinner.value(),
176
- Pcu23=self.w2.pcu_spinner.value(),
177
- Pcu31=self.w3.pcu_spinner.value(),
178
- Vsc12=self.w1.vsc_spinner.value(),
179
- Vsc23=self.w2.vsc_spinner.value(),
180
- Vsc31=self.w3.vsc_spinner.value(),
181
- Pfe=self.pfe_spinner.value(),
182
- I0=self.I0_spinner.value(),
183
- Sbase=self.Sbase)
173
+ self._api_object.fill_from_design_values(V1=self.w1.vn_spinner.value(),
174
+ V2=self.w2.vn_spinner.value(),
175
+ V3=self.w3.vn_spinner.value(),
176
+ Sn1=self.w1.sn_spinner.value(),
177
+ Sn2=self.w2.sn_spinner.value(),
178
+ Sn3=self.w3.sn_spinner.value(),
179
+ Pcu12=self.w1.pcu_spinner.value(),
180
+ Pcu23=self.w2.pcu_spinner.value(),
181
+ Pcu31=self.w3.pcu_spinner.value(),
182
+ Vsc12=self.w1.vsc_spinner.value(),
183
+ Vsc23=self.w2.vsc_spinner.value(),
184
+ Vsc31=self.w3.vsc_spinner.value(),
185
+ Pfe=self.pfe_spinner.value(),
186
+ I0=self.I0_spinner.value(),
187
+ Sbase=self.Sbase)
184
188
 
185
189
  self.accept()
186
190
 
@@ -3,7 +3,7 @@
3
3
  # file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  # SPDX-License-Identifier: MPL-2.0
5
5
  from __future__ import annotations
6
- from typing import Tuple, TYPE_CHECKING
6
+ from typing import Tuple, List, TYPE_CHECKING
7
7
  from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent
8
8
  from GridCal.Gui.gui_functions import add_menu_entry
9
9
  from PySide6 import QtWidgets
@@ -87,6 +87,21 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
87
87
  # Assign color to the node
88
88
  self.set_default_color()
89
89
 
90
+ @property
91
+ def api_object(self) -> LineLocation:
92
+ return self._api_object
93
+
94
+ @property
95
+ def editor(self) -> GridMapWidget:
96
+ return self._editor
97
+
98
+ def get_associated_widgets(self) -> List[MapLineContainer]:
99
+ """
100
+ This forwards to the map line container for the appropriate deletion of everything
101
+ :return:
102
+ """
103
+ return [self.line_container]
104
+
90
105
  def get_center_pos(self) -> QPointF:
91
106
  """
92
107
 
@@ -114,7 +129,6 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
114
129
 
115
130
  if self.enabled:
116
131
  self.update_real_pos()
117
- self.needs_update = True
118
132
  self.line_container.update_connectors()
119
133
 
120
134
  def update_position_at_the_diagram(self) -> None:
@@ -125,16 +139,14 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
125
139
  center_point = self.get_pos()
126
140
 
127
141
  self.lat, self.lon = self.editor.to_lat_lon(x=center_point.x() + real_position.x(),
128
- y=center_point.y() + real_position.y())
142
+ y=center_point.y() + real_position.y())
129
143
 
130
144
  # print(f'Updating node position id:{self.api_object.idtag}, lat:{self.lat}, lon:{self.lon}')
131
145
 
132
146
  self.editor.update_diagram_element(device=self.api_object,
133
- latitude=self.lat,
134
- longitude=self.lon,
135
- graphic_object=self)
136
-
137
- print()
147
+ latitude=self.lat,
148
+ longitude=self.lon,
149
+ graphic_object=self)
138
150
 
139
151
  def update_database_position(self) -> None:
140
152
  """
@@ -144,7 +156,7 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
144
156
  center_point = self.get_pos()
145
157
 
146
158
  self.lat, self.lon = self.editor.to_lat_lon(x=center_point.x() + real_position.x(),
147
- y=center_point.y() + real_position.y())
159
+ y=center_point.y() + real_position.y())
148
160
 
149
161
  # print(f'Updating node position id:{self.api_object.idtag}, lat:{self.lat}, lon:{self.lon}')
150
162
 
@@ -241,48 +253,19 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
241
253
  """
242
254
  menu = QMenu()
243
255
 
244
- # add_menu_entry(menu=menu,
245
- # text="Merge",
246
- # icon_path="",
247
- # function_ptr=self.MergeFunction)
248
- #
249
- # add_menu_entry(menu=menu,
250
- # text="Split",
251
- # icon_path=":/Icons/icons/divide.svg",
252
- # function_ptr=self.SplitFunction)
253
-
254
256
  add_menu_entry(menu=menu,
255
257
  text="Delete",
256
- icon_path=":/Icons/icons/delete.svg",
258
+ icon_path=":/Icons/icons/delete_schematic.svg",
257
259
  function_ptr=self.remove)
258
260
 
259
261
  menu.exec_(event.screenPos())
260
262
 
261
- def AddFunction(self):
262
- """
263
-
264
- :return:
265
- """
266
- self.line_container.insert_new_node_at_position(index=self.index)
267
- # Implement the functionality for Action 1 here
268
- pass
269
-
270
- def SplitFunction(self):
271
- """
272
-
273
- :return:
274
- """
275
- self.line_container.split_Line(index=self.index)
276
- # Implement the functionality for Action 1 here
277
- pass
278
-
279
263
  def remove(self):
280
264
  """
281
265
  Remove
282
266
  """
283
267
  self.line_container.removeNode(node=self)
284
268
 
285
-
286
269
  def setNodeColor(self, inner_color: QColor, border_color: QColor = None) -> None:
287
270
  """
288
271
 
@@ -344,3 +327,5 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
344
327
  pen = self.pen()
345
328
  pen.setWidth(width)
346
329
  self.setPen(pen)
330
+
331
+
@@ -24,3 +24,7 @@ class MapAcLine(MapLineContainer):
24
24
  :param draw_labels:
25
25
  """
26
26
  MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
27
+
28
+ @property
29
+ def api_object(self) -> Line:
30
+ return self._api_object
@@ -24,3 +24,7 @@ class MapDcLine(MapLineContainer):
24
24
  :param draw_labels:
25
25
  """
26
26
  MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
27
+
28
+ @property
29
+ def api_object(self) -> DcLine:
30
+ return self._api_object
@@ -25,3 +25,6 @@ class MapFluidPathLine(MapLineContainer):
25
25
  """
26
26
  MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
27
27
 
28
+ @property
29
+ def api_object(self) -> FluidPath:
30
+ return self._api_object
@@ -24,3 +24,7 @@ class MapHvdcLine(MapLineContainer):
24
24
  :param draw_labels:
25
25
  """
26
26
  MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
27
+
28
+ @property
29
+ def api_object(self) -> HvdcLine:
30
+ return self._api_object
@@ -44,12 +44,18 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
44
44
  draw_labels=draw_labels)
45
45
  QGraphicsItemGroup.__init__(self)
46
46
 
47
- self.editor: GridMapWidget = editor # reassign to make clear the editor type
48
-
49
47
  self.nodes_list: List[LineLocationGraphicItem] = list()
50
48
  self.segments_list: List[MapLineSegment] = list()
51
49
  self.enabled = True
52
50
 
51
+ @property
52
+ def api_object(self) -> Union[BRANCH_TYPES, FluidPath]:
53
+ return self._api_object
54
+
55
+ @property
56
+ def editor(self) -> GridMapWidget:
57
+ return self._editor
58
+
53
59
  def set_width_scale(self, width: float, arrow_width: float):
54
60
  """
55
61
  Set the width scale of the line
@@ -68,7 +74,7 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
68
74
  Remove all segments from the scene
69
75
  """
70
76
  for segment in self.segments_list:
71
- self.editor.remove_only_graphic_element(segment)
77
+ self.editor._remove_from_scene(segment)
72
78
 
73
79
  self.segments_list = list()
74
80
 
@@ -77,7 +83,7 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
77
83
  Remove all the nodes from the scene
78
84
  """
79
85
  for node in self.nodes_list:
80
- self.editor.remove_from_scene(node)
86
+ self.editor._remove_from_scene(node)
81
87
 
82
88
  self.nodes_list = list()
83
89
 
@@ -127,8 +133,8 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
127
133
 
128
134
  :return:
129
135
  """
130
- for conector in self.segments_list:
131
- conector.update_endings()
136
+ for connector in self.segments_list:
137
+ connector.update_endings()
132
138
 
133
139
  def end_update(self) -> None:
134
140
  """
@@ -158,10 +164,10 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
158
164
  loc_data = None
159
165
 
160
166
  graphic_obj = self.editor.create_line_location_graphic(line_container=self,
161
- api_object=elm,
162
- lat=elm.lat if loc_data is None else loc_data.latitude,
163
- lon=elm.long if loc_data is None else loc_data.longitude,
164
- index=self.number_of_nodes()) # 2.7 ...
167
+ api_object=elm,
168
+ lat=elm.lat if loc_data is None else loc_data.latitude,
169
+ lon=elm.long if loc_data is None else loc_data.longitude,
170
+ index=self.number_of_nodes()) # 2.7 ...
165
171
 
166
172
  self.register_new_node(node=graphic_obj)
167
173
 
@@ -215,8 +221,8 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
215
221
  connection_elements.append(substation_to_graphics)
216
222
  substation_to_graphics.line_container = self
217
223
 
218
- br_scale = self.editor.get_branch_width()
219
- arrow_scale = self.editor.get_arrow_scale()
224
+ # br_scale = self.editor.get_branch_width()
225
+ # arrow_scale = self.editor.get_arrow_scale()
220
226
 
221
227
  # second pass: create the segments
222
228
  for i in range(1, len(connection_elements)):
@@ -231,9 +237,6 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
231
237
  elm2.needsUpdate = True
232
238
  segment_graphic_object.needsUpdate = True
233
239
 
234
- # segment_graphic_object.set_width(br_scale * segment_graphic_object.width) # Assign the pen to the line item
235
- # segment_graphic_object.set_arrow_sizes(arrow_scale)
236
-
237
240
  # register the segment in the line
238
241
  self.add_segment(segment=segment_graphic_object)
239
242
 
@@ -242,8 +245,6 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
242
245
 
243
246
  self.update_connectors()
244
247
 
245
- # self.editor.update_device_sizes()
246
-
247
248
  def substation_to(self):
248
249
  """
249
250
 
@@ -290,10 +291,10 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
290
291
  # Create a new graphical node item
291
292
 
292
293
  graphic_obj = self.editor.create_line_location_graphic(line_container=self,
293
- api_object=new_api_object,
294
- lat=new_api_object.lat,
295
- lon=new_api_object.long,
296
- index=index)
294
+ api_object=new_api_object,
295
+ lat=new_api_object.lat,
296
+ lon=new_api_object.long,
297
+ index=index)
297
298
 
298
299
  idx = 0
299
300
 
@@ -339,10 +340,10 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
339
340
  # Create a new graphical node item
340
341
 
341
342
  graphic_obj = self.editor.create_line_location_graphic(line_container=self,
342
- api_object=new_api_object,
343
- lat=new_api_object.lat,
344
- lon=new_api_object.long,
345
- index=0)
343
+ api_object=new_api_object,
344
+ lat=new_api_object.lat,
345
+ lon=new_api_object.long,
346
+ index=0)
346
347
 
347
348
  # Add the node to the nodes list
348
349
  self.nodes_list.insert(0, graphic_obj)
@@ -385,10 +386,10 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
385
386
  # Create a new graphical node item
386
387
 
387
388
  graphic_obj = self.editor.create_line_location_graphic(line_container=self,
388
- api_object=new_api_object,
389
- lat=new_api_object.lat,
390
- lon=new_api_object.long,
391
- index=index)
389
+ api_object=new_api_object,
390
+ lat=new_api_object.lat,
391
+ lon=new_api_object.long,
392
+ index=index)
392
393
 
393
394
  idx = 0
394
395
 
@@ -532,5 +533,22 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
532
533
  # Update the line's length property
533
534
  if total_length > 0.0:
534
535
  self.api_object.length = total_length
535
-
536
+
536
537
  return total_length
538
+
539
+ def get_extra_graphics(self):
540
+ """
541
+ This function gets the graphic objects associated to a MapLineContainer
542
+ return: The list of the associated graphic objects, which are the nodes and segments of the line.
543
+ """
544
+ return self.segments_list + self.nodes_list
545
+
546
+ def delete(self):
547
+ """
548
+ Delete this object and all the other objects
549
+ """
550
+ for segment in self.segments_list:
551
+ segment.delete_from_associations()
552
+
553
+ self.editor.delete_with_dialogue(selected=[self], delete_from_db=False)
554
+