GridCal 5.1.21__tar.gz → 5.1.23__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ExecuteGridCal.py +12 -10
  2. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +2 -2
  3. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +19 -30
  4. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +1 -0
  5. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +56 -50
  6. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +20 -9
  7. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +27 -1
  8. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +29 -1
  9. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +29 -0
  10. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/GuiFunctions.py +27 -9
  11. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/GridCalMain.py +5 -1
  12. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/MainWindow.py +1482 -1214
  13. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +25 -10
  14. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +36 -22
  15. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Model/objects.py +13 -6
  16. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +3 -3
  17. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +38 -4
  18. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/base_gui.py +17 -11
  19. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/io.py +65 -57
  20. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/simulations.py +51 -86
  21. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/icons_rc.py +660 -452
  22. GridCal-5.1.23/GridCal/Gui/plugins.py +221 -0
  23. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Session/server_driver.py +73 -14
  24. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +1 -1
  25. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/__version__.py +1 -1
  26. {GridCal-5.1.21 → GridCal-5.1.23}/PKG-INFO +2 -2
  27. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  28. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  29. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  30. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  31. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  32. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  33. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Analysis/__init__.py +0 -0
  34. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Analysis/gui.py +0 -0
  35. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  36. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  37. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  38. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  39. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  40. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  41. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  42. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ConsoleWidget.py +0 -0
  43. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  44. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  45. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  46. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  47. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  48. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  49. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  50. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  51. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  52. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  53. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  54. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  55. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  56. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  57. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  58. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  59. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  60. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +0 -0
  61. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  62. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  63. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
  64. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +0 -0
  65. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +0 -0
  66. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
  67. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
  68. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
  69. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +0 -0
  70. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
  71. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
  72. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
  73. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  74. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  75. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  76. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  77. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  78. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  79. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  80. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
  81. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/new_line_dialogue.py +0 -0
  82. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
  83. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  84. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  85. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  86. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  87. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  88. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  89. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  90. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  91. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  92. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  93. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  94. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  95. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  96. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  97. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  98. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  99. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  100. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  101. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  102. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  103. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  104. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  105. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  106. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  107. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  108. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  109. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  110. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  111. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  112. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  113. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  114. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  115. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  116. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  117. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  118. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  119. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  120. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  121. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/__init__.py +0 -0
  122. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  123. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  124. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  125. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  126. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/GeneralDialogues.py +0 -0
  127. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  128. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  129. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/GridGenerator/gui.py +0 -0
  130. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  131. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  132. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  133. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  134. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  135. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  136. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  137. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  138. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  139. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  140. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  141. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  142. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  143. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  144. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  145. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  146. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  147. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  148. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  149. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  150. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  151. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  152. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  153. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  154. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  155. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/__init__.py +0 -0
  156. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/object_select_window.py +0 -0
  157. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Main/update_gui_file.py +0 -0
  158. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  159. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  160. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  161. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  162. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  163. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  164. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  165. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  166. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  167. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  168. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  169. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  170. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  171. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  172. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  173. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  174. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  175. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  176. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  177. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  178. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  179. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  180. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  181. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  182. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  183. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  184. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  185. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  186. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  187. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  188. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  189. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  190. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  191. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  192. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  193. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  194. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  195. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  196. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  197. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  198. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  199. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  200. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  201. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  202. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  203. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  204. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  205. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  206. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  207. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Visualization/__init__.py +0 -0
  208. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Visualization/visualization.py +0 -0
  209. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Widgets/__init__.py +0 -0
  210. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  211. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  212. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  213. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  214. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  215. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  216. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  217. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/__init__.py +0 -0
  218. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/associations_model.py +0 -0
  219. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/messages.py +0 -0
  220. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/object_model.py +0 -0
  221. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/pandas_model.py +0 -0
  222. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/plot_config.py +0 -0
  223. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/profiles_model.py +0 -0
  224. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/table_view_header_wrap.py +0 -0
  225. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/themes.py +0 -0
  226. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/update_gui_all.py +0 -0
  227. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Gui/update_gui_common.py +0 -0
  228. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/LICENSE.txt +0 -0
  229. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Session/__init__.py +0 -0
  230. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Session/export_results_driver.py +0 -0
  231. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Session/file_handler.py +0 -0
  232. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Session/results_model.py +0 -0
  233. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Session/session.py +0 -0
  234. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/Session/synchronization_driver.py +0 -0
  235. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/__init__.py +0 -0
  236. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  237. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  238. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  239. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  240. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  241. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  242. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  243. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  244. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  245. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  246. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  247. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  248. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  249. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  250. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  251. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  252. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  253. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  254. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  255. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  256. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  257. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  258. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  259. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  260. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  261. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  262. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  263. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  264. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  265. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  266. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  267. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  268. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  269. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  270. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  271. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  272. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  273. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/__init__.py +0 -0
  274. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/data/__init__.py +0 -0
  275. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/data/cables.csv +0 -0
  276. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/data/sequence_lines.csv +0 -0
  277. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/data/transformers.csv +0 -0
  278. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/data/wires.csv +0 -0
  279. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/templates.py +0 -0
  280. {GridCal-5.1.21 → GridCal-5.1.23}/GridCal/update.py +0 -0
  281. {GridCal-5.1.21 → GridCal-5.1.23}/setup.cfg +0 -0
  282. {GridCal-5.1.21 → GridCal-5.1.23}/setup.py +0 -0
@@ -1,17 +1,19 @@
1
- # This file is part of GridCal.
1
+ # GridCal
2
+ # Copyright (C) 2015 - 2024 Santiago Peñate Vera
2
3
  #
3
- # GridCal is free software: you can redistribute it and/or modify
4
- # it under the terms of the GNU General Public License as published by
5
- # the Free Software Foundation, either version 3 of the License, or
6
- # (at your option) any later version.
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3 of the License, or (at your option) any later version.
7
8
  #
8
- # GridCal is distributed in the hope that it will be useful,
9
+ # This program is distributed in the hope that it will be useful,
9
10
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
12
13
  #
13
- # You should have received a copy of the GNU General Public License
14
- # along with GridCal. If not, see <http://www.gnu.org/licenses/>.
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program; if not, write to the Free Software Foundation,
16
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
17
  import os
16
18
  import sys
17
19
  import ctypes
@@ -59,12 +59,12 @@ class MapLineContainer(GenericDiagramWidget):
59
59
  editor=editor,
60
60
  draw_labels=draw_labels)
61
61
 
62
- self.editor: GridMapWidget = editor # re assign to make clear the editor type
62
+ self.editor: GridMapWidget = editor # reassign to make clear the editor type
63
63
 
64
64
  self.nodes_list: List[NodeGraphicItem] = list()
65
65
  self.segments_list: List[MapLineSegment] = list()
66
66
  self.enabled = True
67
- self.original = True
67
+ self.original = True # TODO: Que es esto?
68
68
 
69
69
  def setWidthScale(self, val: float):
70
70
  """
@@ -18,8 +18,8 @@ from __future__ import annotations
18
18
  from typing import List, TYPE_CHECKING, Tuple
19
19
  from PySide6 import QtWidgets
20
20
  from PySide6.QtWidgets import (QApplication, QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent,
21
- QGraphicsRectItem, QGraphicsEllipseItem)
22
- from PySide6.QtCore import Qt, QPointF, QPoint
21
+ QGraphicsRectItem)
22
+ from PySide6.QtCore import Qt, QPointF
23
23
  from PySide6.QtGui import QBrush, QColor, QCursor
24
24
  from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
25
25
  from GridCal.Gui.GuiFunctions import add_menu_entry
@@ -88,7 +88,9 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
88
88
  # self.resize(r)
89
89
  self.setAcceptHoverEvents(True) # Enable hover events for the item
90
90
  # self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable) # Allow moving the node
91
- self.setFlag(self.GraphicsItemFlag.ItemIsSelectable) # Allow selecting the node
91
+ self.setFlag(
92
+ self.GraphicsItemFlag.ItemIsSelectable | QGraphicsRectItem.ItemIsMovable) # Allow selecting the node
93
+
92
94
  self.setCursor(QCursor(Qt.PointingHandCursor))
93
95
 
94
96
  # Create a pen with reduced line width
@@ -136,25 +138,15 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
136
138
  for i, vl_graphics in enumerate(sorted_objects):
137
139
  vl_graphics.setZValue(i)
138
140
 
139
- def updatePosition(self) -> None:
140
- """
141
-
142
- :return:
143
- """
144
- real_position = self.pos()
145
- center_point = self.getPos()
146
- # self.x = center_point.x() + real_position.x()
147
- # self.y = center_point.y() + real_position.y()
148
- self.needsUpdate = True
149
-
150
- def updateDiagram(self):
141
+ def update_diagram(self):
151
142
  """
152
-
143
+ Updates the element position in the diagram (to save)
153
144
  :return:
154
145
  """
155
146
  lat, long = self.editor.to_lat_lon(self.rect().x(), self.rect().y())
156
147
 
157
- # print(f'Updating SE position id:{self.api_object.idtag}, lat:{lat}, lon:{long}')
148
+ self.lat = lat
149
+ self.lon = long
158
150
 
159
151
  self.editor.update_diagram_element(device=self.api_object,
160
152
  latitude=lat,
@@ -163,8 +155,8 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
163
155
 
164
156
  def get_center_pos(self) -> QPointF:
165
157
  """
166
-
167
- :return:
158
+ Get the center position
159
+ :return: QPointF
168
160
  """
169
161
  x = self.rect().x() + self.rect().width() / 2
170
162
  y = self.rect().y() + self.rect().height() / 2
@@ -186,16 +178,16 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
186
178
  for vl_graphics in self.voltage_level_graphics:
187
179
  vl_graphics.center_on_substation()
188
180
 
189
- self.updateDiagram() # always update
181
+ self.update_diagram() # always update
190
182
 
191
183
  def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
192
184
  """
193
185
  Event handler for mouse press events.
194
186
  """
195
187
  super().mousePressEvent(event)
196
- selected_items = self.editor.map.view._scene.selectedItems()
197
- if len(selected_items) < 2:
198
- self.setSelected(True)
188
+ # selected_items = self.editor.map.view.selected_items()
189
+ # if len(selected_items) < 2:
190
+ self.setSelected(True)
199
191
 
200
192
  event.setAccepted(True)
201
193
  self.editor.map.view.disableMove = True
@@ -211,14 +203,13 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
211
203
  DeviceType.ZoneDevice: self.editor.circuit.get_zones(),
212
204
  })
213
205
 
214
-
215
206
  def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent):
216
207
  """
217
208
  Event handler for mouse release events.
218
209
  """
219
210
  # super().mouseReleaseEvent(event)
220
211
  self.editor.disableMove = True
221
- self.updateDiagram() # always update
212
+ self.update_diagram() # always update
222
213
  print("SE mouse release")
223
214
 
224
215
  def hoverEnterEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
@@ -252,7 +243,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
252
243
  function_ptr=self.add_voltage_level)
253
244
 
254
245
  add_menu_entry(menu=menu,
255
- text="Create line",
246
+ text="Create line from here",
256
247
  icon_path="",
257
248
  function_ptr=self.create_new_line)
258
249
 
@@ -276,15 +267,13 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
276
267
  icon_path="",
277
268
  function_ptr=self.new_substation_diagram)
278
269
 
279
-
280
-
281
270
  menu.exec_(event.screenPos())
282
271
 
283
272
  def create_new_line(self):
284
273
  """
285
274
  Create a new line in the map wizard
286
275
  """
287
- self.editor.createNewLineWizard()
276
+ self.editor.create_new_line_wizard()
288
277
 
289
278
  def add_function(self):
290
279
  """
@@ -319,7 +308,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
319
308
 
320
309
  pass
321
310
 
322
- def remove_function(self):
311
+ def remove_function(self) -> None:
323
312
  """
324
313
  Function to be called when Action 1 is selected.
325
314
  """
@@ -23,6 +23,7 @@ from GridCal.Gui.Diagrams.MapWidget.Tiles.tile_worker import TileWorker
23
23
  def log(val: str):
24
24
  print(val)
25
25
 
26
+
26
27
  # # set how old disk-cache tiles can be before we re-request them from the
27
28
  # # server. this is the number of days old a tile is before we re-request.
28
29
  # # if 'None', never re-request tiles after first satisfied request.
@@ -56,6 +56,7 @@ import GridCalEngine.Devices.Diagrams.palettes as palettes
56
56
  from GridCal.Gui.Diagrams.graphics_manager import ALL_MAP_GRAPHICS
57
57
  from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
58
58
  from GridCal.Gui.Diagrams.base_diagram_widget import BaseDiagramWidget
59
+ from GridCal.Gui.messages import error_msg
59
60
 
60
61
  MAP_BRANCH_GRAPHIC_TYPES = Union[
61
62
  MapAcLine, MapDcLine, MapHvdcLine, MapFluidPathLine
@@ -457,53 +458,60 @@ class GridMapWidget(BaseDiagramWidget):
457
458
  if it1 == it2:
458
459
  return 0
459
460
 
460
- newline = Line()
461
- newline.set_data_from(it1.line_container.api_object)
461
+ new_line = Line()
462
+ new_line.set_data_from(it1.line_container.api_object)
462
463
  # ln1 = self.api_object.copy()
463
464
 
464
- better_first, better_second, busfrom, busto = compare_options(it1, it2)
465
+ better_first, better_second, bus_from, bus_to = compare_options(it1, it2)
465
466
 
466
467
  first_list = better_first.line_container.api_object.locations.data
467
468
  second_list = better_second.line_container.api_object.locations.data
468
469
 
469
- newline.locations.data = first_list + second_list
470
+ new_line.locations.data = first_list + second_list
470
471
 
471
- newline.bus_from = busfrom
472
- newline.bus_to = busto
472
+ new_line.bus_from = bus_from
473
+ new_line.bus_to = bus_to
473
474
 
474
475
  idx = 0
475
476
  for nod in better_first.line_container.nodes_list:
476
- newline.locations.data[idx].lat = nod.lat
477
- newline.locations.data[idx].long = nod.lon
477
+ new_line.locations.data[idx].lat = nod.lat
478
+ new_line.locations.data[idx].long = nod.lon
478
479
  idx = idx + 1
479
480
 
480
481
  for nod in better_second.line_container.nodes_list:
481
- newline.locations.data[idx].lat = nod.lat
482
- newline.locations.data[idx].long = nod.lon
482
+ new_line.locations.data[idx].lat = nod.lat
483
+ new_line.locations.data[idx].long = nod.lon
483
484
  idx = idx + 1
484
485
 
485
- newL = self.add_api_line(newline, original=False)
486
+ self.add_api_line(new_line, original=False)
487
+ self.circuit.add_line(new_line)
486
488
 
487
489
  better_first.line_container.disable_line()
488
490
  better_second.line_container.disable_line()
489
491
 
490
- def createNewLineWizard(self):
492
+ def get_selected_substations(self) -> List[SubstationGraphicItem]:
493
+ """
494
+ Get the selected substations graphics
495
+ :return: List[SubstationGraphicItem]
496
+ """
497
+ return [s for s in self.map.view.selected_items() if isinstance(s, SubstationGraphicItem)]
498
+
499
+ def create_new_line_wizard(self):
491
500
  """
492
501
  Create a new line in the map with dialogues
493
502
  """
494
503
 
495
- selected_items = self.map.view._scene.selectedItems()
496
- selectedItems = []
497
- for item in selected_items:
498
- selectedItems.append(item)
504
+ selected_items = self.get_selected_substations()
499
505
 
500
- if len(selectedItems) < 2:
501
- return 0
506
+ if len(selected_items) != 2:
507
+ error_msg(text="Please select two substations", title="Create new line")
508
+ return None
502
509
 
503
- it1: SubstationGraphicItem = selectedItems[0]
504
- it2: SubstationGraphicItem = selectedItems[1]
510
+ it1: SubstationGraphicItem = selected_items[0]
511
+ it2: SubstationGraphicItem = selected_items[1]
505
512
 
506
513
  if it1 == it2:
514
+ error_msg(text="Somehow the two substations are the same :(", title="Create new line")
507
515
  return None
508
516
 
509
517
  dialog = NewMapLineDialogue(grid=self.circuit, se_from=it1.api_object, se_to=it2.api_object)
@@ -512,8 +520,12 @@ class GridMapWidget(BaseDiagramWidget):
512
520
  bus1 = dialog.bus_from()
513
521
  bus2 = dialog.bus_to()
514
522
  if bus1 is not None and bus2 is not None:
515
- newline = Line(bus_from=bus1, bus_to=bus2)
516
- self.add_api_line(newline, original=True)
523
+ new_line = Line(bus_from=bus1, bus_to=bus2)
524
+ self.add_api_line(new_line, original=True)
525
+ self.circuit.add_line(new_line)
526
+ else:
527
+ error_msg(text="Some of the buses was None :(", title="Create new line")
528
+ return None
517
529
 
518
530
  def removeNode(self, node: NodeGraphicItem):
519
531
  """
@@ -570,8 +582,7 @@ class GridMapWidget(BaseDiagramWidget):
570
582
  # create the nodes
571
583
  line_container.draw_all()
572
584
 
573
- # there is not need to add to the scene
574
-
585
+ # there is nt need to add to the scene
575
586
  return line_container
576
587
 
577
588
  def add_api_dc_line(self, api_object: DcLine, original: bool = True) -> MapDcLine:
@@ -752,24 +763,16 @@ class GridMapWidget(BaseDiagramWidget):
752
763
  for idtag, graphic_object in dev_dict.items():
753
764
  graphic_object.sort_voltage_levels()
754
765
 
755
- def add_object_to_the_schematic(
756
- self,
757
- elm: ALL_DEV_TYPES,
758
- injections_by_bus: Union[None, Dict[Bus, Dict[DeviceType, List[INJECTION_DEVICE_TYPES]]]] = None,
759
- injections_by_fluid_node: Union[None, Dict[FluidNode, Dict[DeviceType, List[FLUID_TYPES]]]] = None,
760
- injections_by_cn: Union[None, Dict[Bus, Dict[DeviceType, List[INJECTION_DEVICE_TYPES]]]] = None,
761
- logger: Logger = Logger()):
766
+ def add_object_to_the_schematic(self, elm: ALL_DEV_TYPES, logger: Logger = Logger()):
762
767
  """
763
768
 
764
769
  :param elm:
765
- :param injections_by_bus:
766
- :param injections_by_fluid_node:
767
- :param injections_by_cn:
768
770
  :param logger:
769
771
  :return:
770
772
  """
773
+ graphic_obj = self.graphics_manager.query(elm=elm)
771
774
 
772
- if self.graphics_manager.query(elm=elm) is None:
775
+ if graphic_obj is None:
773
776
 
774
777
  if isinstance(elm, Substation):
775
778
  self.add_api_substation(api_object=elm,
@@ -797,31 +800,35 @@ class GridMapWidget(BaseDiagramWidget):
797
800
  lon=substation_graphics.lon,
798
801
  lat=substation_graphics.lat)
799
802
 
800
- elif isinstance(elm, FluidNode):
801
-
802
- if injections_by_fluid_node is None:
803
- injections_by_fluid_node = self.circuit.get_injection_devices_grouped_by_fluid_node()
804
-
805
- # TODO: maybe new thing?
806
- self.add_api_fluid_node(node=elm,
807
- injections_by_tpe=injections_by_fluid_node.get(elm, dict()))
808
-
809
803
  elif isinstance(elm, Line):
810
- self.add_api_line(elm)
804
+ line_container = self.add_api_line(elm)
805
+ for segment in line_container.segments_list:
806
+ self.add_to_scene(graphic_object=segment)
811
807
 
812
808
  elif isinstance(elm, DcLine):
813
- self.add_api_dc_line(elm)
809
+ line_container = self.add_api_dc_line(elm)
810
+ for segment in line_container.segments_list:
811
+ self.add_to_scene(graphic_object=segment)
814
812
 
815
813
  elif isinstance(elm, HvdcLine):
816
- self.add_api_hvdc_line(elm)
814
+ line_container = self.add_api_hvdc_line(elm)
815
+ for segment in line_container.segments_list:
816
+ self.add_to_scene(graphic_object=segment)
817
817
 
818
818
  elif isinstance(elm, FluidPath):
819
- self.add_api_fluid_path(elm)
819
+ line_container = self.add_api_fluid_path(elm)
820
+ for segment in line_container.segments_list:
821
+ self.add_to_scene(graphic_object=segment)
820
822
 
821
823
  else:
822
- pass
824
+ logger.add_warning("Unsupported device class",
825
+ device_class=elm.device_type.value,
826
+ device=elm.name)
823
827
 
824
828
  else:
829
+
830
+ self.add_to_scene(graphic_obj)
831
+
825
832
  logger.add_warning("Device already added", device_class=elm.device_type.value, device=elm.name)
826
833
 
827
834
  def dropEvent(self, event: QDropEvent):
@@ -842,7 +849,6 @@ class GridMapWidget(BaseDiagramWidget):
842
849
  # print(f"Dropped at x:{x0}, y:{y0}, lat:{lat}, lon:{lon}")
843
850
 
844
851
  if obj_type == self.library_model.get_substation_mime_data():
845
-
846
852
  api_object = Substation(name=f"Substation {self.circuit.get_substation_number()}",
847
853
  latitude=lat,
848
854
  longitude=lon)
@@ -30,12 +30,12 @@ ygeo: latitude
30
30
  from __future__ import annotations
31
31
  from typing import List, Union, Tuple, Callable, TYPE_CHECKING
32
32
  from enum import Enum
33
- from PySide6.QtCore import Qt, QTimer, QEvent, QPointF, QRectF
33
+ from PySide6.QtCore import Qt, QTimer, QEvent, QPointF
34
34
  from PySide6.QtGui import (QPainter, QColor, QPixmap, QCursor,
35
35
  QMouseEvent, QKeyEvent, QWheelEvent,
36
36
  QResizeEvent, QEnterEvent, QPaintEvent, QDragEnterEvent, QDragMoveEvent, QDropEvent)
37
37
  from PySide6.QtWidgets import (QSizePolicy, QWidget, QGraphicsScene, QGraphicsView, QVBoxLayout,
38
- QGraphicsSceneMouseEvent)
38
+ QGraphicsSceneMouseEvent, QGraphicsItem)
39
39
 
40
40
  from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
41
41
 
@@ -83,7 +83,7 @@ class MapScene(QGraphicsScene):
83
83
  :param event:
84
84
  :return:
85
85
  """
86
- print(f"Scene released at {event.scenePos()}")
86
+ # print(f"Scene released at {event.scenePos()}")
87
87
  super().mouseReleaseEvent(event)
88
88
 
89
89
  def mouseMoveEvent(self, event: QGraphicsSceneMouseEvent) -> None:
@@ -134,6 +134,13 @@ class MapView(QGraphicsView):
134
134
 
135
135
  self.scale(initial_zoom_factor, initial_zoom_factor)
136
136
 
137
+ def selected_items(self) -> List[QGraphicsItem]:
138
+ """
139
+ Get the selected items
140
+ :return:
141
+ """
142
+ return self._scene.selectedItems()
143
+
137
144
  def mousePressEvent(self, event: QMouseEvent):
138
145
  """
139
146
 
@@ -489,7 +496,7 @@ class MapWidget(QWidget):
489
496
  while abs(self.view.schema_zoom - 0.015625) > 0.00001:
490
497
  self.view.schema_zoom = self.view.schema_zoom / self.view.map_widget.zoom_factor
491
498
  self.view.scale(1.0 / self.view.map_widget.zoom_factor, 1.0 / self.view.map_widget.zoom_factor)
492
- self.GotoLevelAndPosition(level=0, longitude=None, latitude=None)
499
+ self.GotoLevelAndPosition(level=0, longitude=0, latitude=0)
493
500
 
494
501
  @property
495
502
  def max_level(self):
@@ -606,6 +613,7 @@ class MapWidget(QWidget):
606
613
 
607
614
  elif b == Qt.MouseButton.LeftButton:
608
615
  self.left_mbutton_down = True
616
+ self.editor.object_editor_table.setModel(None)
609
617
 
610
618
  elif b == Qt.MouseButton.MiddleButton:
611
619
  self.mid_mbutton_down = True
@@ -614,7 +622,8 @@ class MapWidget(QWidget):
614
622
  self.right_mbutton_down = True
615
623
 
616
624
  else:
617
- print('mousePressEvent: unknown button')
625
+ pass
626
+ # print('mousePressEvent: unknown button')
618
627
 
619
628
  def mouseReleaseEvent(self, event: QMouseEvent) -> None:
620
629
  """
@@ -657,7 +666,8 @@ class MapWidget(QWidget):
657
666
  self.right_mbutton_down = False
658
667
 
659
668
  else:
660
- print('mouseReleaseEvent: unknown button')
669
+ pass
670
+ # print('mouseReleaseEvent: unknown button')
661
671
 
662
672
  def mouseDoubleClickEvent(self, event: QMouseEvent):
663
673
  """
@@ -675,7 +685,8 @@ class MapWidget(QWidget):
675
685
  elif b == Qt.RightButton:
676
686
  pass
677
687
  else:
678
- print('mouseDoubleClickEvent: unknown button')
688
+ pass
689
+ # print('mouseDoubleClickEvent: unknown button')
679
690
 
680
691
  def mouseMoveEvent(self, event: QMouseEvent):
681
692
  """
@@ -1816,11 +1827,11 @@ class MapWidget(QWidget):
1816
1827
  exist in the new tileset.
1817
1828
  """
1818
1829
 
1819
- print('ChangeTileSet: tile_src=%s' % str(tile_src))
1830
+ # print('ChangeTileSet: tile_src=%s' % str(tile_src))
1820
1831
 
1821
1832
  # get level and geo position of view centre
1822
1833
  level, longitude, latitude = self.get_level_and_position()
1823
- print('level=%s, geo=(%s, %s)' % (str(level), str(longitude), str(latitude)))
1834
+ # print('level=%s, geo=(%s, %s)' % (str(level), str(longitude), str(latitude)))
1824
1835
 
1825
1836
  # remember old tileset
1826
1837
  old_tileset = self.tile_src
@@ -24,7 +24,7 @@ from GridCal.Gui.messages import yes_no_question
24
24
  from GridCal.Gui.Diagrams.SchematicWidget.Branches.transformer_editor import TransformerEditor
25
25
  from GridCal.Gui.Diagrams.SchematicWidget.Branches.transformer_taps_editor import TransformerTapsEditor
26
26
  from GridCalEngine.Devices.Branches.transformer import Transformer2W, TransformerType
27
- from GridCalEngine.enumerations import DeviceType
27
+ from GridCalEngine.enumerations import DeviceType, TapModuleControl
28
28
 
29
29
  if TYPE_CHECKING: # Only imports the below statements during type checking
30
30
  from GridCal.Gui.Diagrams.SchematicWidget.schematic_widget import SchematicWidget
@@ -107,6 +107,16 @@ class TransformerGraphicItem(LineGraphicTemplateItem):
107
107
  function_ptr=self.tap_down,
108
108
  icon_path=":/Icons/icons/down.svg")
109
109
 
110
+ add_menu_entry(menu=menu,
111
+ text="Control V from",
112
+ function_ptr=self.control_v_from,
113
+ icon_path=":/Icons/icons/edit.svg")
114
+
115
+ add_menu_entry(menu=menu,
116
+ text="Control V to",
117
+ function_ptr=self.control_v_to,
118
+ icon_path=":/Icons/icons/edit.svg")
119
+
110
120
  menu.addSeparator()
111
121
 
112
122
  add_menu_entry(menu=menu,
@@ -240,3 +250,19 @@ class TransformerGraphicItem(LineGraphicTemplateItem):
240
250
  Set one tap down
241
251
  """
242
252
  self.api_object.tap_down()
253
+
254
+ def control_v_from(self):
255
+ """
256
+
257
+ :return:
258
+ """
259
+ self.api_object.regulation_bus = self.api_object.bus_from
260
+ self.api_object.tap_module_control_mode = TapModuleControl.Vm
261
+
262
+ def control_v_to(self):
263
+ """
264
+
265
+ :return:
266
+ """
267
+ self.api_object.regulation_bus = self.api_object.bus_to
268
+ self.api_object.tap_module_control_mode = TapModuleControl.Vm
@@ -21,6 +21,7 @@ from PySide6.QtWidgets import QMenu
21
21
  from GridCal.Gui.GuiFunctions import add_menu_entry
22
22
  from GridCal.Gui.Diagrams.SchematicWidget.terminal_item import BarTerminalItem
23
23
  from GridCalEngine.Devices.Branches.upfc import UPFC
24
+ from GridCalEngine.enumerations import TapModuleControl
24
25
  from GridCal.Gui.Diagrams.SchematicWidget.Branches.line_graphics_template import LineGraphicTemplateItem
25
26
 
26
27
  if TYPE_CHECKING: # Only imports the below statements during type checking
@@ -90,6 +91,18 @@ class UpfcGraphicItem(LineGraphicTemplateItem):
90
91
 
91
92
  menu.addSeparator()
92
93
 
94
+ add_menu_entry(menu=menu,
95
+ text="Control V from",
96
+ function_ptr=self.control_v_from,
97
+ icon_path=":/Icons/icons/edit.svg")
98
+
99
+ add_menu_entry(menu=menu,
100
+ text="Control V to",
101
+ function_ptr=self.control_v_to,
102
+ icon_path=":/Icons/icons/edit.svg")
103
+
104
+ menu.addSeparator()
105
+
93
106
  ra6 = menu.addAction('Plot profiles')
94
107
  plot_icon = QIcon()
95
108
  plot_icon.addPixmap(QPixmap(":/Icons/icons/plot.svg"))
@@ -108,7 +121,22 @@ class UpfcGraphicItem(LineGraphicTemplateItem):
108
121
  ra5.setIcon(ra5_icon)
109
122
  ra5.triggered.connect(self.assign_status_to_profile)
110
123
 
111
-
112
124
  menu.exec_(event.screenPos())
113
125
  else:
114
126
  pass
127
+
128
+ def control_v_from(self):
129
+ """
130
+
131
+ :return:
132
+ """
133
+ self.api_object.regulation_bus = self.api_object.bus_from
134
+ self.api_object.tap_module_control_mode = TapModuleControl.Vm
135
+
136
+ def control_v_to(self):
137
+ """
138
+
139
+ :return:
140
+ """
141
+ self.api_object.regulation_bus = self.api_object.bus_to
142
+ self.api_object.tap_module_control_mode = TapModuleControl.Vm
@@ -21,6 +21,7 @@ from PySide6.QtWidgets import QMenu
21
21
  from GridCal.Gui.GuiFunctions import add_menu_entry
22
22
  from GridCal.Gui.Diagrams.SchematicWidget.terminal_item import BarTerminalItem, RoundTerminalItem
23
23
  from GridCalEngine.Devices.Branches.vsc import VSC
24
+ from GridCalEngine.enumerations import TapModuleControl
24
25
  from GridCal.Gui.Diagrams.SchematicWidget.Branches.line_graphics_template import LineGraphicTemplateItem
25
26
 
26
27
  if TYPE_CHECKING: # Only imports the below statements during type checking
@@ -95,6 +96,18 @@ class VscGraphicItem(LineGraphicTemplateItem):
95
96
 
96
97
  menu.addSeparator()
97
98
 
99
+ add_menu_entry(menu=menu,
100
+ text="Control V from",
101
+ function_ptr=self.control_v_from,
102
+ icon_path=":/Icons/icons/edit.svg")
103
+
104
+ add_menu_entry(menu=menu,
105
+ text="Control V to",
106
+ function_ptr=self.control_v_to,
107
+ icon_path=":/Icons/icons/edit.svg")
108
+
109
+ menu.addSeparator()
110
+
98
111
  ra6 = menu.addAction('Plot profiles')
99
112
  plot_icon = QIcon()
100
113
  plot_icon.addPixmap(QPixmap(":/Icons/icons/plot.svg"))
@@ -125,3 +138,19 @@ class VscGraphicItem(LineGraphicTemplateItem):
125
138
  """
126
139
 
127
140
  pass
141
+
142
+ def control_v_from(self):
143
+ """
144
+
145
+ :return:
146
+ """
147
+ self.api_object.regulation_bus = self.api_object.bus_from
148
+ self.api_object.tap_module_control_mode = TapModuleControl.Vm
149
+
150
+ def control_v_to(self):
151
+ """
152
+
153
+ :return:
154
+ """
155
+ self.api_object.regulation_bus = self.api_object.bus_to
156
+ self.api_object.tap_module_control_mode = TapModuleControl.Vm