GridCal 5.1.19__tar.gz → 5.1.20__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 (276) hide show
  1. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +16 -57
  2. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +11 -1
  3. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +10 -6
  4. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +16 -7
  5. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +16 -15
  6. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +5 -2
  7. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +30 -28
  8. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +36 -33
  9. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +15 -0
  10. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +3 -5
  11. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +9 -1
  12. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +9 -1
  13. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +10 -1
  14. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +1 -23
  15. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/base_diagram_widget.py +13 -27
  16. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/MainWindow.py +885 -959
  17. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +84 -57
  18. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +7 -11
  19. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/io.py +2 -2
  20. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/simulations.py +1 -2
  21. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +2 -3
  22. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/__version__.py +1 -1
  23. {GridCal-5.1.19 → GridCal-5.1.20}/PKG-INFO +1 -1
  24. GridCal-5.1.19/GridCal/Gui/Visualization/palettes.py +0 -464
  25. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ExecuteGridCal.py +0 -0
  26. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  27. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  28. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  29. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  30. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  31. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  32. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Analysis/__init__.py +0 -0
  33. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Analysis/gui.py +0 -0
  34. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  35. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  36. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  37. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  38. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  39. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  40. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  41. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ConsoleWidget.py +0 -0
  42. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  43. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  44. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  45. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  46. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  47. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  48. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  49. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  50. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  51. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  52. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  53. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  54. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  55. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  56. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  57. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  58. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +0 -0
  59. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  60. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
  61. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
  62. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
  63. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
  64. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +0 -0
  65. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
  66. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
  67. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
  68. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  69. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  70. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  71. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  72. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  73. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  74. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  75. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  76. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/logger.py +0 -0
  77. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
  78. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
  79. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  80. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  81. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  82. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  83. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  84. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  85. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  86. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  87. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  88. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  89. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  90. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  91. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  92. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  93. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  94. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  95. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  96. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  97. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  98. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  99. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  100. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  101. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  102. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  103. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  104. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  105. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  106. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  107. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  108. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  109. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  110. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  111. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  112. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  113. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  114. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/__init__.py +0 -0
  115. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  116. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  117. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  118. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/GeneralDialogues.py +0 -0
  119. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  120. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  121. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/gui.py +0 -0
  122. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  123. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  124. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/GuiFunctions.py +0 -0
  125. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  126. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  127. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  128. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  129. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  130. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  131. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  132. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/GridCalMain.py +0 -0
  133. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  134. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  135. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  136. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  137. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  138. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  139. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  140. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  141. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  142. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  143. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  144. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  145. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  146. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  147. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  148. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/__init__.py +0 -0
  149. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/icons_rc.py +0 -0
  150. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/object_select_window.py +0 -0
  151. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Main/update_gui_file.py +0 -0
  152. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  153. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  154. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  155. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  156. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  157. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  158. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  159. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  160. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  161. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  162. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  163. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  164. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  165. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  166. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  167. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  168. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  169. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  170. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  171. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  172. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  173. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  174. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  175. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  176. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  177. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  178. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  179. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  180. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  181. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  182. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  183. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  184. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  185. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  186. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  187. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  188. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  189. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  190. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  191. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  192. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  193. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  194. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  195. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  196. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  197. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  198. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  199. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  200. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Visualization/__init__.py +0 -0
  201. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Visualization/visualization.py +0 -0
  202. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Widgets/__init__.py +0 -0
  203. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  204. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  205. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  206. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  207. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  208. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  209. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  210. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/__init__.py +0 -0
  211. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/associations_model.py +0 -0
  212. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/messages.py +0 -0
  213. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/object_model.py +0 -0
  214. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/pandas_model.py +0 -0
  215. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/plot_config.py +0 -0
  216. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/profiles_model.py +0 -0
  217. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/themes.py +0 -0
  218. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/update_gui_all.py +0 -0
  219. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Gui/update_gui_common.py +0 -0
  220. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/LICENSE.txt +0 -0
  221. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Session/__init__.py +0 -0
  222. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Session/export_results_driver.py +0 -0
  223. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Session/file_handler.py +0 -0
  224. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Session/results_model.py +0 -0
  225. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Session/server_driver.py +0 -0
  226. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Session/session.py +0 -0
  227. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/Session/synchronization_driver.py +0 -0
  228. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/__init__.py +0 -0
  229. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  230. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  231. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  232. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  233. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  234. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  235. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  236. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  237. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  238. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  239. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  240. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  241. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  242. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  243. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  244. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  245. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  246. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  247. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  248. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  249. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  250. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  251. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  252. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  253. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  254. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  255. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  256. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  257. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  258. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  259. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  260. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  261. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  262. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  263. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  264. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  265. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  266. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  267. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/__init__.py +0 -0
  268. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/data/__init__.py +0 -0
  269. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/data/cables.csv +0 -0
  270. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/data/sequence_lines.csv +0 -0
  271. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/data/transformers.csv +0 -0
  272. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/data/wires.csv +0 -0
  273. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/templates.py +0 -0
  274. {GridCal-5.1.19 → GridCal-5.1.20}/GridCal/update.py +0 -0
  275. {GridCal-5.1.19 → GridCal-5.1.20}/setup.cfg +0 -0
  276. {GridCal-5.1.19 → GridCal-5.1.20}/setup.py +0 -0
@@ -78,7 +78,7 @@ class MapLineContainer(GenericDiagramWidget):
78
78
  Remove all segments from the scene
79
79
  """
80
80
  for segment in self.segments_list:
81
- self.editor.remove_from_scene(segment)
81
+ self.editor.remove_only_graphic_element(segment)
82
82
 
83
83
  self.segments_list = list()
84
84
 
@@ -257,48 +257,16 @@ class MapLineContainer(GenericDiagramWidget):
257
257
  # draw the segment in the scene
258
258
  self.editor.add_to_scene(graphic_object=segment_graphic_object)
259
259
 
260
- # diagram_locations: PointsGroup = self.editor.diagram.data.get(DeviceType.LineLocation.value, None)
261
- #
262
- # for idx, elm in enumerate(self.api_object.locations.data):
263
- #
264
- # if diagram_locations is None:
265
- # # no locations found, use the data from the api object
266
- # # lat = elm.lat
267
- # # lon = elm.long
268
- # pass
269
- # else:
270
- #
271
- # # try to get location from the diagram
272
- # diagram_location = diagram_locations.locations.get(elm.idtag, None)
273
- #
274
- # if diagram_location is None:
275
- # # no particular location found, use the data from the api object
276
- # # lat = elm.lat
277
- # # lon = elm.long
278
- # pass
279
- # else:
280
- # # Draw only what's on the diagram
281
- # # diagram data found, use it
282
- #
283
- # if idx > 0:
284
- # i1 = idx
285
- # i2 = idx - 1
286
- # # Assuming Connector takes (scene, node1, node2) as arguments
287
- # segment_graphic_object = Segment(first=self.nodes_list[i1],
288
- # second=self.nodes_list[i2])
289
- #
290
- # self.nodes_list[i1].needsUpdateFirst = True
291
- # self.nodes_list[i2].needsUpdateSecond = True
292
- # segment_graphic_object.needsUpdate = True
293
- #
294
- # # register the segment in the line
295
- # self.add_segment(segment=segment_graphic_object)
296
- #
297
- # # draw the segment in the scene
298
- # self.editor.add_to_scene(graphic_object=segment_graphic_object)
299
-
300
260
  self.update_connectors()
301
261
 
262
+ self.editor.Update_widths()
263
+
264
+ def substation_to(self):
265
+ return self.editor.graphics_manager.query(elm=self.api_object.get_substation_to())
266
+
267
+ def substation_from(self):
268
+ return self.editor.graphics_manager.query(elm=self.api_object.get_substation_from())
269
+
302
270
  def insert_new_node_at_position(self, index: int):
303
271
  """
304
272
  Creates a new node in the list at the given position
@@ -307,7 +275,7 @@ class MapLineContainer(GenericDiagramWidget):
307
275
  """
308
276
 
309
277
  # Check if the index is valid
310
- if 1 <= index < len(self.api_object.locations.data):
278
+ if 1 <= index < len(self.api_object.locations.data) and len(self.api_object.locations.data) > 1:
311
279
 
312
280
  nd1 = self.nodes_list[index]
313
281
  nd2 = self.nodes_list[index - 1]
@@ -356,7 +324,7 @@ class MapLineContainer(GenericDiagramWidget):
356
324
  # Return the newly created node
357
325
  return graphic_obj
358
326
 
359
- elif index == 0 and len(self.api_object.locations.data) == 0:
327
+ elif len(self.api_object.locations.data) == 0:
360
328
 
361
329
  substation_from_graphics = self.editor.graphics_manager.query(elm=self.api_object.get_substation_from())
362
330
  substation_to_graphics = self.editor.graphics_manager.query(elm=self.api_object.get_substation_to())
@@ -375,7 +343,7 @@ class MapLineContainer(GenericDiagramWidget):
375
343
  idtag="",
376
344
  code="")
377
345
 
378
- self.api_object.locations.data.insert(index, new_api_object)
346
+ self.api_object.locations.data.insert(0, new_api_object)
379
347
 
380
348
  # Create a new graphical node item
381
349
 
@@ -383,19 +351,10 @@ class MapLineContainer(GenericDiagramWidget):
383
351
  api_object=new_api_object,
384
352
  lat=new_api_object.lat,
385
353
  lon=new_api_object.long,
386
- index=index)
387
-
388
- idx = 0
389
-
390
- for nod in self.nodes_list:
391
-
392
- if idx >= index:
393
- nod.index = nod.index + 1
394
-
395
- idx = idx + 1
354
+ index=0)
396
355
 
397
356
  # Add the node to the nodes list
398
- self.nodes_list.insert(index, graphic_obj)
357
+ self.nodes_list.insert(0, graphic_obj)
399
358
 
400
359
  graphic_obj.updatePosition()
401
360
 
@@ -405,7 +364,7 @@ class MapLineContainer(GenericDiagramWidget):
405
364
  # Return the newly created node
406
365
  return graphic_obj
407
366
 
408
- elif 0 == index or index == len(self.api_object.locations.data):
367
+ elif (0 == index or index >= len(self.api_object.locations.data) - 1):
409
368
 
410
369
  substation_from_graphics = self.editor.graphics_manager.query(elm=self.api_object.get_substation_from())
411
370
  substation_to_graphics = self.editor.graphics_manager.query(elm=self.api_object.get_substation_to())
@@ -417,7 +376,7 @@ class MapLineContainer(GenericDiagramWidget):
417
376
  nd2 = self.nodes_list[0]
418
377
 
419
378
  if index >= len(self.nodes_list):
420
- nd2 = self.nodes_list[len(self.nodes_list) - 1]
379
+ nd1 = self.nodes_list[len(self.nodes_list) - 1]
421
380
 
422
381
  new_lat = ((nd2.lat + nd1.lat) / 2)
423
382
  new_long = ((nd2.lon + nd1.lon) / 2)
@@ -324,8 +324,18 @@ class MapLineSegment(QGraphicsLineItem):
324
324
 
325
325
  if len(self.container.nodes_list) == 0:
326
326
  self.container.insert_new_node_at_position(0)
327
+ elif len(self.container.nodes_list) == 1:
328
+ if self.second == self.container.substation_to() or self.first == self.container.substation_to():
329
+ self.container.insert_new_node_at_position(1)
330
+ else:
331
+ self.container.insert_new_node_at_position(0)
327
332
  else:
328
- self.container.insert_new_node_at_position(self.second.index)
333
+ if self.second == self.container.substation_to() or self.first == self.container.substation_to():
334
+ self.container.insert_new_node_at_position(len(self.container.nodes_list))
335
+ elif self.second == self.container.substation_from() or self.first == self.container.substation_from():
336
+ self.container.insert_new_node_at_position(0)
337
+ else:
338
+ self.container.insert_new_node_at_position(self.first.index)
329
339
 
330
340
  # TODO implement
331
341
  # self.editor.split_line(line_graphics=self)
@@ -101,16 +101,21 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
101
101
  # self.setZValue(1)
102
102
  self.voltage_level_graphics: List[VoltageLevelGraphicItem] = list()
103
103
 
104
- def move_to(self, lat: float, lon: float):
104
+ def move_to(self, lat: float, lon: float) -> Tuple[float, float]:
105
105
  """
106
106
 
107
107
  :param lat:
108
108
  :param lon:
109
- :return:
109
+ :return: x, y
110
110
  """
111
111
  x, y = self.editor.to_x_y(lat=lat, lon=lon)
112
112
  self.setRect(x, y, self.rect().width(), self.rect().height())
113
113
 
114
+ for vl in self.voltage_level_graphics:
115
+ vl.center_on_substation()
116
+
117
+ return x, y
118
+
114
119
  def register_voltage_level(self, vl: VoltageLevelGraphicItem):
115
120
  """
116
121
 
@@ -179,7 +184,6 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
179
184
  for vl_graphics in self.voltage_level_graphics:
180
185
  vl_graphics.center_on_substation()
181
186
 
182
- self.editor.update_connectors()
183
187
  self.updateDiagram() # always update
184
188
 
185
189
  def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
@@ -251,7 +255,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
251
255
 
252
256
  add_menu_entry(menu=menu,
253
257
  text="ADD node",
254
- icon_path="",
258
+ icon_path=":/Icons/icons/divide.svg",
255
259
  function_ptr=self.add_function)
256
260
 
257
261
  add_menu_entry(menu=menu,
@@ -311,8 +315,8 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
311
315
  "Move substation graphics")
312
316
 
313
317
  if ok:
314
- self.move_to(lat=self.api_object.latitude, lon=self.api_object.longitude)
315
- self.editor.update_connectors()
318
+ x, y = self.move_to(lat=self.api_object.latitude, lon=self.api_object.longitude) # this moves the vl too
319
+ self.set_callabacks(x, y)
316
320
 
317
321
  def new_substation_diagram(self):
318
322
  """
@@ -61,19 +61,19 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
61
61
  api_object=api_object,
62
62
  editor=editor,
63
63
  draw_labels=draw_labels)
64
- QGraphicsEllipseItem.__init__(self, parent_center.x(), parent_center.y(), r, r, parent)
64
+ QGraphicsEllipseItem.__init__(self, parent_center.x(), parent_center.y(), r * api_object.Vnom, r * api_object.Vnom, parent)
65
65
 
66
66
  parent.register_voltage_level(vl=self)
67
67
 
68
68
  self.editor: GridMapWidget = editor # to reinforce the type
69
69
  self.api_object: VoltageLevel = api_object # to reinforce the type
70
70
 
71
- self.radius = r
71
+ self.radius = r * api_object.Vnom
72
72
  print(f"VL created at x:{parent_center.x()}, y:{parent_center.y()}")
73
73
 
74
74
  self.setAcceptHoverEvents(True) # Enable hover events for the item
75
75
  # self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable) # Allow moving the node
76
- self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable) # Allow selecting the node
76
+ self.setFlag(self.GraphicsItemFlag.ItemIsSelectable | self.GraphicsItemFlag.ItemIsMovable) # Allow selecting the node
77
77
 
78
78
  # Create a pen with reduced line width
79
79
  self.change_pen_width(0.5)
@@ -90,7 +90,7 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
90
90
  self.needsUpdate = False
91
91
  self.setZValue(0)
92
92
 
93
- def center_on_substation(self):
93
+ def center_on_substation(self) -> None:
94
94
  """
95
95
  Centers the graphic item on the substation
96
96
  """
@@ -99,6 +99,16 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
99
99
  yc = parent_center.y() - self.rect().height() / 2
100
100
  self.setRect(xc, yc, self.rect().width(), self.rect().height())
101
101
 
102
+ def move_to_xy(self, x: float, y: float):
103
+ """
104
+
105
+ :param x:
106
+ :param y:
107
+ :return:
108
+ """
109
+ self.setRect(x, y, self.rect().width(), self.rect().height())
110
+ return x, y
111
+
102
112
  def updateDiagram(self) -> None:
103
113
  """
104
114
 
@@ -120,10 +130,9 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
120
130
  """
121
131
  Event handler for mouse move events.
122
132
  """
123
- super().mouseMoveEvent(event)
133
+ # super().mouseMoveEvent(event)
124
134
  if self.hovered:
125
- # self.updatePosition()
126
- self.editor.update_connectors()
135
+ self.parent.mouseMoveEvent(event)
127
136
 
128
137
  def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
129
138
  """
@@ -4,15 +4,15 @@ A tile source that serves BlueMarble tiles from the internet.
4
4
 
5
5
  import math
6
6
  from typing import Tuple
7
- import GridCal.Gui.Diagrams.MapWidget.Tiles.tiles as tiles_net
7
+ from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
8
8
 
9
9
 
10
- class BlueMarbleTiles(tiles_net.Tiles):
10
+ class BlueMarbleTiles(Tiles):
11
11
  """
12
12
  An object to source internet tiles for pySlip.
13
13
  """
14
14
 
15
- def __init__(self, tiles_dir='blue_marble_tiles', http_proxy=None):
15
+ def __init__(self, tiles_dir='blue_marble_tiles', http_proxy=None, name: str = 'Blue Marble'):
16
16
  """
17
17
  Override the base class for these tiles.
18
18
 
@@ -22,18 +22,19 @@ class BlueMarbleTiles(tiles_net.Tiles):
22
22
  :param http_proxy:
23
23
  """
24
24
 
25
- super().__init__(TilesetName='BlueMarble Tiles',
26
- TilesetShortName='BM Tiles',
27
- TilesetVersion='1.0',
28
- levels=list(range(10)),
29
- tile_width=256,
30
- tile_height=256,
31
- tiles_dir=tiles_dir,
32
- max_lru=10000,
33
- servers=['https://s3.amazonaws.com', ],
34
- url_path='/com.modestmaps.bluemarble/{Z}-r{Y}-c{X}.jpg',
35
- max_server_requests=2,
36
- http_proxy=http_proxy)
25
+ Tiles.__init__(self,
26
+ TilesetName=name,
27
+ TilesetShortName='BM Tiles',
28
+ TilesetVersion='1.0',
29
+ levels=list(range(10)),
30
+ tile_width=256,
31
+ tile_height=256,
32
+ tiles_dir=tiles_dir,
33
+ max_lru=10000,
34
+ servers=['https://s3.amazonaws.com', ],
35
+ url_path='/com.modestmaps.bluemarble/{Z}-r{Y}-c{X}.jpg',
36
+ max_server_requests=2,
37
+ http_proxy=http_proxy)
37
38
 
38
39
  def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[float, float]:
39
40
  """Convert geo to tile fractional coordinates for level in use.
@@ -10,7 +10,10 @@ from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
10
10
  class CartoDbTiles(Tiles):
11
11
  """An object to source server tiles for pySlipQt."""
12
12
 
13
- def __init__(self, tiles_dir='open_street_map_tiles', http_proxy=None, tile_servers=None):
13
+ def __init__(self, tiles_dir='open_street_map_tiles',
14
+ http_proxy=None,
15
+ tile_servers=None,
16
+ name: str = 'Carto positron'):
14
17
  """
15
18
  Override the base class for these tiles.
16
19
 
@@ -21,7 +24,7 @@ class CartoDbTiles(Tiles):
21
24
  :param tile_servers:
22
25
  """
23
26
 
24
- super().__init__(TilesetName='CartoDb Dark Matter',
27
+ super().__init__(TilesetName=name,
25
28
  TilesetShortName='CartoDb Dark Matter',
26
29
  TilesetVersion='1.0',
27
30
  levels=list(range(17)),
@@ -51,7 +51,7 @@ from GridCal.Gui.Diagrams.MapWidget.Substation.substation_graphic_item import Su
51
51
  from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
52
52
  from GridCal.Gui.Diagrams.MapWidget.map_widget import MapWidget
53
53
  import GridCal.Gui.Visualization.visualization as viz
54
- import GridCal.Gui.Visualization.palettes as palettes
54
+ import GridCalEngine.Devices.Diagrams.palettes as palettes
55
55
  from GridCal.Gui.Diagrams.graphics_manager import ALL_MAP_GRAPHICS
56
56
  from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
57
57
  from GridCal.Gui.Diagrams.base_diagram_widget import BaseDiagramWidget
@@ -207,11 +207,6 @@ class GridMapWidget(BaseDiagramWidget):
207
207
  name: str,
208
208
  circuit: MultiCircuit,
209
209
  diagram: Union[None, MapDiagram] = None,
210
- use_flow_based_width: bool = False,
211
- min_branch_width: int = 5,
212
- max_branch_width=5,
213
- min_bus_width=20,
214
- max_bus_width=20,
215
210
  call_delete_db_element_func: Callable[["GridMapWidget", ALL_DEV_TYPES], None] = None,
216
211
  call_new_substation_diagram_func: Callable[[Substation], None] = None, ):
217
212
  """
@@ -234,11 +229,6 @@ class GridMapWidget(BaseDiagramWidget):
234
229
  latitude=latitude) if diagram is None else diagram,
235
230
  library_model=MapLibraryModel(),
236
231
  time_index=None,
237
- use_flow_based_width=use_flow_based_width,
238
- min_branch_width=min_branch_width,
239
- max_branch_width=max_branch_width,
240
- min_bus_width=min_bus_width,
241
- max_bus_width=max_bus_width,
242
232
  call_delete_db_element_func=call_delete_db_element_func)
243
233
 
244
234
  # declare the map
@@ -252,11 +242,11 @@ class GridMapWidget(BaseDiagramWidget):
252
242
  position_callback=self.position_callback)
253
243
 
254
244
  # Any representation on the map must be done after this Goto Function
255
- self.map.GotoLevelAndPosition(level=start_level, longitude=longitude, latitude=latitude)
245
+ self.map.GotoLevelAndPosition(level=6, longitude=0, latitude=40)
256
246
 
257
- self.map.startLev = start_level
258
- self.map.startLat = latitude
259
- self.map.startLon = longitude
247
+ self.map.startLev = 6
248
+ self.map.startLat = 0
249
+ self.map.startLon = 40
260
250
 
261
251
  # function pointer to call for a new substation diagram
262
252
  self.call_new_substation_diagram_func = call_new_substation_diagram_func
@@ -315,6 +305,13 @@ class GridMapWidget(BaseDiagramWidget):
315
305
 
316
306
  self.map.diagram_scene.addItem(graphic_object)
317
307
 
308
+ def remove_only_graphic_element(self, graphic_object: ALL_MAP_GRAPHICS = None) -> None:
309
+ """
310
+ Removes only the graphic elements, not the api_object
311
+ :param graphic_object: Graphic object associated
312
+ """
313
+ self.map.diagram_scene.removeItem(graphic_object)
314
+
318
315
  def remove_from_scene(self, graphic_object: ALL_MAP_GRAPHICS = None) -> None:
319
316
  """
320
317
  Add item to the diagram and the diagram scene
@@ -604,18 +601,19 @@ class GridMapWidget(BaseDiagramWidget):
604
601
 
605
602
  :return:
606
603
  """
607
- for dev_tpe in [DeviceType.LineDevice,
608
- DeviceType.DCLineDevice,
609
- DeviceType.HVDCLineDevice,
610
- DeviceType.FluidPathDevice]:
611
-
612
- dev_dict = self.graphics_manager.get_device_type_dict(device_type=dev_tpe)
613
-
614
- for idtag, graphic_object in dev_dict.items():
615
- graphic_object.update_connectors()
616
-
617
- for idtag, graphic_object in dev_dict.items():
618
- graphic_object.end_update()
604
+ # for dev_tpe in [DeviceType.LineDevice,
605
+ # DeviceType.DCLineDevice,
606
+ # DeviceType.HVDCLineDevice,
607
+ # DeviceType.FluidPathDevice]:
608
+ #
609
+ # dev_dict = self.graphics_manager.get_device_type_dict(device_type=dev_tpe)
610
+ #
611
+ # for idtag, graphic_object in dev_dict.items():
612
+ # graphic_object.update_connectors()
613
+ #
614
+ # for idtag, graphic_object in dev_dict.items():
615
+ # graphic_object.end_update()
616
+ pass
619
617
 
620
618
  def add_api_substation(self,
621
619
  api_object: Substation,
@@ -822,10 +820,14 @@ class GridMapWidget(BaseDiagramWidget):
822
820
 
823
821
  # SANTIAGO: NO TOCAR ESTO ES EL COMPORTAMIENTO DESEADO
824
822
 
823
+ self.Update_widths()
824
+
825
+ def Update_widths(self):
826
+
825
827
  max_zoom = self.map.max_level
826
828
  min_zoom = self.map.min_level
827
829
  zoom = self.map.zoom_factor
828
- scale = self.min_branch_width + (zoom - min_zoom) / (max_zoom - min_zoom)
830
+ scale = self.diagram.min_branch_width + (zoom - min_zoom) / (max_zoom - min_zoom)
829
831
 
830
832
  # rescale lines
831
833
  for dev_tpe in [DeviceType.LineDevice,
@@ -100,30 +100,20 @@ class MapView(QGraphicsView):
100
100
  MapView
101
101
  """
102
102
 
103
- def __init__(self, _scene: QGraphicsScene,
104
- map_widget: "MapWidget",
105
- start_level: int,
106
- startLat: float,
107
- startLon: float):
103
+ def __init__(self,
104
+ scene: QGraphicsScene,
105
+ map_widget: "MapWidget"):
108
106
  """
109
107
 
110
- :param _scene:
108
+ :param scene:
111
109
  :param map_widget:
112
- :param start_level:
113
- :param startLat:
114
- :param startLon:
115
110
  """
116
- QGraphicsView.__init__(self, _scene)
111
+ QGraphicsView.__init__(self, scene)
117
112
 
118
- self._scene = _scene
113
+ self._scene = scene
119
114
 
120
115
  self.map_widget = map_widget
121
116
 
122
- self.startLat = startLat
123
- self.startLon = startLon
124
- self.startLev = start_level
125
- self.map_widget.level = start_level
126
-
127
117
  self.mouse_x = None
128
118
  self.mouse_y = None
129
119
 
@@ -134,21 +124,16 @@ class MapView(QGraphicsView):
134
124
  self.pressed = False
135
125
  self.disableMove = False
136
126
 
137
- self.startHe = None
138
- self.startWi = None
139
-
140
127
  # updated later
141
128
  self.view_width = self.width()
142
129
  self.view_height = self.height()
143
130
 
144
131
  # Set initial zoom level (change the values as needed)
145
- initial_zoom_factor = 1
146
- self.schema_zoom = 1
132
+ initial_zoom_factor = 1.0
133
+ self.schema_zoom = 1.0
147
134
 
148
135
  self.scale(initial_zoom_factor, initial_zoom_factor)
149
136
 
150
- self.selTempDistance = 20
151
-
152
137
  self.selectedItems = list()
153
138
 
154
139
  def mousePressEvent(self, event: QMouseEvent):
@@ -396,11 +381,7 @@ class MapWidget(QWidget):
396
381
 
397
382
  self.editor: GridMapWidget = editor
398
383
 
399
- self.view = MapView(self.diagram_scene,
400
- map_widget=self,
401
- start_level=start_level,
402
- startLat=startLat,
403
- startLon=startLon)
384
+ self.view = MapView(scene=self.diagram_scene, map_widget=self)
404
385
 
405
386
  self.view.setBackgroundBrush(Qt.transparent)
406
387
 
@@ -425,8 +406,8 @@ class MapWidget(QWidget):
425
406
  # Internal vars
426
407
  # -------------------------------------------------------------------------
427
408
  # remember the tile source object
428
- self.tile_src: Tiles = tile_src
429
- self.tile_src.setCallback(self.on_tile_available)
409
+ self._tile_src: Tiles = tile_src
410
+ self._tile_src.setCallback(self.on_tile_available)
430
411
 
431
412
  # the tile coordinates
432
413
  self.level: int = start_level
@@ -481,9 +462,31 @@ class MapWidget(QWidget):
481
462
  # do a "resize" after this function
482
463
  QTimer.singleShot(10, self.resizeEvent)
483
464
 
484
- self.GotoLevelAndPosition(level=start_level,
485
- longitude=startLon,
486
- latitude=startLat)
465
+ self.GotoLevelAndPosition(level=6,
466
+ longitude=0,
467
+ latitude=40)
468
+
469
+ @property
470
+ def tile_src(self) -> Tiles:
471
+ """
472
+ Get the current tile source
473
+ :return: Tiles
474
+ """
475
+ return self._tile_src
476
+
477
+ @tile_src.setter
478
+ def tile_src(self, tile_src: Tiles):
479
+ """
480
+ Set the current tile source
481
+ :param tile_src: Tiles
482
+ """
483
+ if tile_src.TilesetName != self._tile_src.TilesetName: # avoid changing tilesets to themselves
484
+ self._tile_src: Tiles = tile_src
485
+ self._tile_src.setCallback(self.on_tile_available)
486
+
487
+ self.GotoLevelAndPosition(level=tile_src.min_level,
488
+ longitude=0.0,
489
+ latitude=0.0)
487
490
 
488
491
  @property
489
492
  def max_level(self):
@@ -210,6 +210,11 @@ class LineGraphicItem(LineGraphicTemplateItem):
210
210
  function_ptr=self.to_series_reactance,
211
211
  icon_path=":/Icons/icons/to_series_reactance.svg")
212
212
 
213
+ add_menu_entry(menu=menu,
214
+ text="Switch",
215
+ function_ptr=self.to_switch,
216
+ icon_path=":/Icons/icons/switch.svg")
217
+
213
218
  menu.exec(event.screenPos())
214
219
  else:
215
220
  pass
@@ -344,6 +349,16 @@ class LineGraphicItem(LineGraphicTemplateItem):
344
349
  if ok:
345
350
  self.editor.convert_line_to_series_reactance(line=self.api_object, line_graphic=self)
346
351
 
352
+ def to_switch(self):
353
+ """
354
+ Convert this object to switch
355
+ :return:
356
+ """
357
+ ok = yes_no_question('Are you sure that you want to convert this line into a switch device?',
358
+ 'Convert line')
359
+ if ok:
360
+ self.editor.convert_line_to_switch(line=self.api_object, line_graphic=self)
361
+
347
362
  def __str__(self):
348
363
 
349
364
  if self.api_object is None:
@@ -87,14 +87,12 @@ class InjectionTemplateGraphicItem(GenericDiagramWidget, QGraphicsItemGroup):
87
87
  Update the nexus line that joins the parent and this object
88
88
  :param pos: position of this object
89
89
  """
90
- parent = self.parentItem()
91
- rect = parent.rect()
92
- term = parent.get_terminal()
90
+ parent_pt = self.parentItem().get_nexus_point()
93
91
  self.nexus.setLine(
94
92
  pos.x() + self.w / 2,
95
93
  pos.y(),
96
- parent.x() + rect.width() / 2,
97
- parent.y() + rect.height() + term.h / 2,
94
+ parent_pt.x(),
95
+ parent_pt.y(),
98
96
  )
99
97
  self.setZValue(-1)
100
98
  self.nexus.setZValue(-1)
@@ -18,7 +18,7 @@ from __future__ import annotations
18
18
  import numpy as np
19
19
  from typing import Union, TYPE_CHECKING, List, Dict
20
20
  from PySide6 import QtWidgets
21
- from PySide6.QtCore import Qt, QPoint, QRectF, QRect
21
+ from PySide6.QtCore import Qt, QPoint, QRectF, QRect, QPointF
22
22
  from PySide6.QtGui import QPen, QCursor, QIcon, QPixmap, QBrush, QColor
23
23
  from PySide6.QtWidgets import QMenu, QGraphicsSceneMouseEvent
24
24
 
@@ -145,6 +145,14 @@ class BusGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
145
145
 
146
146
  self.set_position(x, y)
147
147
 
148
+ def get_nexus_point(self) -> QPointF:
149
+ """
150
+ Get the connection point for the chldren nexus line
151
+ :return: QPointF
152
+ """
153
+ return QPointF(self.x() + self.rect().width() / 2.0,
154
+ self.y() + self.rect().height() + self._terminal.h / 2.0)
155
+
148
156
  def recolour_mode(self) -> None:
149
157
  """
150
158
  Change the colour according to the system theme
@@ -18,7 +18,7 @@ from __future__ import annotations
18
18
  import numpy as np
19
19
  from typing import Union, TYPE_CHECKING, List, Dict
20
20
  from PySide6 import QtWidgets
21
- from PySide6.QtCore import Qt, QPoint, QRectF, QRect
21
+ from PySide6.QtCore import Qt, QPoint, QRectF, QRect, QPointF
22
22
  from PySide6.QtGui import QPen, QCursor, QIcon, QPixmap, QBrush, QColor
23
23
  from PySide6.QtWidgets import QMenu, QGraphicsSceneMouseEvent
24
24
 
@@ -133,6 +133,14 @@ class BusBarGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
133
133
 
134
134
  self.set_position(x, y)
135
135
 
136
+ def get_nexus_point(self) -> QPointF:
137
+ """
138
+ Get the connection point for the chldren nexus line
139
+ :return: QPointF
140
+ """
141
+ return QPointF(self.x() + self.rect().width() / 2.0,
142
+ self.y() + self.rect().height() + self._terminal.h / 2.0)
143
+
136
144
  def recolour_mode(self) -> None:
137
145
  """
138
146
  Change the colour according to the system theme