GridCal 5.1.18__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.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +16 -57
  2. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +11 -1
  3. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +43 -19
  4. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +16 -7
  5. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +16 -15
  6. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +5 -2
  7. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +59 -32
  8. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +38 -35
  9. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +15 -0
  10. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +3 -5
  11. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +9 -1
  12. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +9 -1
  13. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +10 -1
  14. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +1 -13
  15. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/base_diagram_widget.py +30 -5
  16. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/MainWindow.py +903 -967
  17. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +136 -22
  18. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/objects.py +3 -0
  19. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +7 -11
  20. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/io.py +2 -2
  21. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/simulations.py +1 -2
  22. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +2 -3
  23. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/__version__.py +1 -1
  24. {GridCal-5.1.18 → GridCal-5.1.20}/PKG-INFO +1 -1
  25. GridCal-5.1.18/GridCal/Gui/Visualization/palettes.py +0 -464
  26. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ExecuteGridCal.py +0 -0
  27. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  28. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  29. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  30. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  31. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  32. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  33. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Analysis/__init__.py +0 -0
  34. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Analysis/gui.py +0 -0
  35. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  36. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  37. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  38. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  39. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  40. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  41. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  42. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ConsoleWidget.py +0 -0
  43. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  44. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  45. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  46. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  47. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  48. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  49. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  50. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  51. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  52. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  53. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  54. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  55. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  56. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  57. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  58. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  59. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +0 -0
  60. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  61. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
  62. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
  63. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
  64. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
  65. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +0 -0
  66. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
  67. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
  68. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
  69. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  70. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  71. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  72. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  73. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  74. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  75. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  76. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  77. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/logger.py +0 -0
  78. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
  79. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
  80. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  81. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  82. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  83. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  84. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  85. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  86. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  87. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  88. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  89. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  90. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  91. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  92. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  93. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  94. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  95. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  96. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  97. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  98. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  99. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  100. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  101. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  102. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  103. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  104. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  105. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  106. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  107. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  108. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  109. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  110. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  111. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  112. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  113. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  114. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  115. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/__init__.py +0 -0
  116. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  117. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  118. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  119. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/GeneralDialogues.py +0 -0
  120. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  121. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  122. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/gui.py +0 -0
  123. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  124. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  125. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/GuiFunctions.py +0 -0
  126. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  127. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  128. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  129. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  130. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  131. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  132. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  133. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/GridCalMain.py +0 -0
  134. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  135. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  136. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  137. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  138. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  139. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  140. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  141. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  142. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  143. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  144. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  145. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  146. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  147. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  148. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/__init__.py +0 -0
  149. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/icons_rc.py +0 -0
  150. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/object_select_window.py +0 -0
  151. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Main/update_gui_file.py +0 -0
  152. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  153. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  154. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  155. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  156. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  157. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  158. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  159. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  160. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  161. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  162. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  163. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  164. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  165. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  166. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  167. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  168. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  169. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  170. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  171. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  172. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  173. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  174. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  175. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  176. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  177. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  178. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  179. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  180. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  181. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  182. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  183. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  184. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  185. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  186. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  187. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  188. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  189. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  190. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  191. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  192. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  193. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  194. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  195. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  196. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  197. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  198. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  199. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  200. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Visualization/__init__.py +0 -0
  201. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Visualization/visualization.py +0 -0
  202. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Widgets/__init__.py +0 -0
  203. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  204. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  205. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  206. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  207. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  208. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  209. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  210. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/__init__.py +0 -0
  211. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/associations_model.py +0 -0
  212. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/messages.py +0 -0
  213. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/object_model.py +0 -0
  214. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/pandas_model.py +0 -0
  215. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/plot_config.py +0 -0
  216. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/profiles_model.py +0 -0
  217. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/themes.py +0 -0
  218. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/update_gui_all.py +0 -0
  219. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Gui/update_gui_common.py +0 -0
  220. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/LICENSE.txt +0 -0
  221. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Session/__init__.py +0 -0
  222. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Session/export_results_driver.py +0 -0
  223. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Session/file_handler.py +0 -0
  224. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Session/results_model.py +0 -0
  225. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Session/server_driver.py +0 -0
  226. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Session/session.py +0 -0
  227. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/Session/synchronization_driver.py +0 -0
  228. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/__init__.py +0 -0
  229. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  230. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  231. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  232. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  233. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  234. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  235. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  236. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  237. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  238. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  239. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  240. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  241. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  242. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  243. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  244. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  245. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  246. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  247. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  248. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  249. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  250. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  251. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  252. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  253. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  254. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  255. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  256. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  257. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  258. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  259. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  260. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  261. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  262. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  263. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  264. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  265. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  266. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  267. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/__init__.py +0 -0
  268. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/data/__init__.py +0 -0
  269. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/data/cables.csv +0 -0
  270. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/data/sequence_lines.csv +0 -0
  271. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/data/transformers.csv +0 -0
  272. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/data/wires.csv +0 -0
  273. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/templates.py +0 -0
  274. {GridCal-5.1.18 → GridCal-5.1.20}/GridCal/update.py +0 -0
  275. {GridCal-5.1.18 → GridCal-5.1.20}/setup.cfg +0 -0
  276. {GridCal-5.1.18 → 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)
@@ -50,7 +50,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
50
50
  api_object: Substation,
51
51
  lat: float,
52
52
  lon: float,
53
- r: float = 0.4,
53
+ r: float = 0.8,
54
54
  draw_labels: bool = True):
55
55
  """
56
56
 
@@ -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
 
@@ -147,13 +152,22 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
147
152
  """
148
153
  lat, long = self.editor.to_lat_lon(self.rect().x(), self.rect().y())
149
154
 
150
- print(f'Updating SE position id:{self.api_object.idtag}, lat:{lat}, lon:{long}')
155
+ # print(f'Updating SE position id:{self.api_object.idtag}, lat:{lat}, lon:{long}')
151
156
 
152
157
  self.editor.update_diagram_element(device=self.api_object,
153
158
  latitude=lat,
154
159
  longitude=long,
155
160
  graphic_object=self)
156
161
 
162
+ def get_center_pos(self) -> QPointF:
163
+ """
164
+
165
+ :return:
166
+ """
167
+ x = self.rect().x() + self.rect().width() / 2
168
+ y = self.rect().y() + self.rect().height() / 2
169
+ return QPointF(x, y)
170
+
157
171
  def mouseMoveEvent(self, event: QtWidgets.QGraphicsSceneMouseEvent) -> None:
158
172
  """
159
173
  Event handler for mouse move events.
@@ -170,23 +184,17 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
170
184
  for vl_graphics in self.voltage_level_graphics:
171
185
  vl_graphics.center_on_substation()
172
186
 
173
- self.editor.update_connectors()
174
-
175
- def get_center_pos(self) -> QPointF:
176
- """
177
-
178
- :return:
179
- """
180
- x = self.rect().x() + self.rect().width() / 2
181
- y = self.rect().y() + self.rect().height() / 2
182
- return QPointF(x, y)
187
+ self.updateDiagram() # always update
183
188
 
184
189
  def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
185
190
  """
186
191
  Event handler for mouse press events.
187
192
  """
193
+ super().mousePressEvent(event)
194
+ event.setAccepted(True)
188
195
  self.editor.map.view.disableMove = True
189
196
 
197
+ print("SE mouse press")
190
198
  if self.api_object is not None:
191
199
  self.editor.set_editor_model(api_object=self.api_object,
192
200
  dictionary_of_lists={
@@ -202,8 +210,10 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
202
210
  """
203
211
  Event handler for mouse release events.
204
212
  """
213
+ # super().mouseReleaseEvent(event)
205
214
  self.editor.disableMove = True
206
215
  self.updateDiagram() # always update
216
+ print("SE mouse release")
207
217
 
208
218
  def hoverEnterEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
209
219
  """
@@ -245,9 +255,14 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
245
255
 
246
256
  add_menu_entry(menu=menu,
247
257
  text="ADD node",
248
- icon_path="",
258
+ icon_path=":/Icons/icons/divide.svg",
249
259
  function_ptr=self.add_function)
250
260
 
261
+ add_menu_entry(menu=menu,
262
+ text="Show diagram",
263
+ icon_path="",
264
+ function_ptr=self.new_substation_diagram)
265
+
251
266
  menu.exec_(event.screenPos())
252
267
 
253
268
  def add_function(self):
@@ -265,8 +280,10 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
265
280
  lines_info = []
266
281
 
267
282
  for idtag, graphic_object in dev_dict.items():
268
- substation_from_graphics = self.editor.graphics_manager.query(elm=graphic_object.api_object.get_substation_from())
269
- substation_to_graphics = self.editor.graphics_manager.query(elm=graphic_object.api_object.get_substation_to())
283
+ substation_from_graphics = self.editor.graphics_manager.query(
284
+ elm=graphic_object.api_object.get_substation_from())
285
+ substation_to_graphics = self.editor.graphics_manager.query(
286
+ elm=graphic_object.api_object.get_substation_to())
270
287
  lines_info.append((idtag, graphic_object, substation_from_graphics, substation_to_graphics))
271
288
 
272
289
  # Now, iterate over the collected information
@@ -298,8 +315,15 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
298
315
  "Move substation graphics")
299
316
 
300
317
  if ok:
301
- self.move_to(lat=self.api_object.latitude, lon=self.api_object.longitude)
302
- 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)
320
+
321
+ def new_substation_diagram(self):
322
+ """
323
+ Function to create a new substation
324
+ :return:
325
+ """
326
+ self.editor.new_substation_diagram(substation=self.api_object)
303
327
 
304
328
  def add_voltage_level(self) -> None:
305
329
  """
@@ -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,7 +207,8 @@ class GridMapWidget(BaseDiagramWidget):
207
207
  name: str,
208
208
  circuit: MultiCircuit,
209
209
  diagram: Union[None, MapDiagram] = None,
210
- call_delete_db_element_func: Callable[["GridMapWidget", ALL_DEV_TYPES], None] = None):
210
+ call_delete_db_element_func: Callable[["GridMapWidget", ALL_DEV_TYPES], None] = None,
211
+ call_new_substation_diagram_func: Callable[[Substation], None] = None, ):
211
212
  """
212
213
 
213
214
  :param tile_src:
@@ -241,11 +242,14 @@ class GridMapWidget(BaseDiagramWidget):
241
242
  position_callback=self.position_callback)
242
243
 
243
244
  # Any representation on the map must be done after this Goto Function
244
- self.map.GotoLevelAndPosition(level=start_level, longitude=longitude, latitude=latitude)
245
+ self.map.GotoLevelAndPosition(level=6, longitude=0, latitude=40)
245
246
 
246
- self.map.startLev = start_level
247
- self.map.startLat = latitude
248
- self.map.startLon = longitude
247
+ self.map.startLev = 6
248
+ self.map.startLat = 0
249
+ self.map.startLon = 40
250
+
251
+ # function pointer to call for a new substation diagram
252
+ self.call_new_substation_diagram_func = call_new_substation_diagram_func
249
253
 
250
254
  self.startHe = self.map.view.height()
251
255
  self.startWi = self.map.view.width()
@@ -301,6 +305,13 @@ class GridMapWidget(BaseDiagramWidget):
301
305
 
302
306
  self.map.diagram_scene.addItem(graphic_object)
303
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
+
304
315
  def remove_from_scene(self, graphic_object: ALL_MAP_GRAPHICS = None) -> None:
305
316
  """
306
317
  Add item to the diagram and the diagram scene
@@ -590,18 +601,19 @@ class GridMapWidget(BaseDiagramWidget):
590
601
 
591
602
  :return:
592
603
  """
593
- for dev_tpe in [DeviceType.LineDevice,
594
- DeviceType.DCLineDevice,
595
- DeviceType.HVDCLineDevice,
596
- DeviceType.FluidPathDevice]:
597
-
598
- dev_dict = self.graphics_manager.get_device_type_dict(device_type=dev_tpe)
599
-
600
- for idtag, graphic_object in dev_dict.items():
601
- graphic_object.update_connectors()
602
-
603
- for idtag, graphic_object in dev_dict.items():
604
- 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
605
617
 
606
618
  def add_api_substation(self,
607
619
  api_object: Substation,
@@ -806,21 +818,25 @@ class GridMapWidget(BaseDiagramWidget):
806
818
  :return:
807
819
  """
808
820
 
809
- pass
821
+ # SANTIAGO: NO TOCAR ESTO ES EL COMPORTAMIENTO DESEADO
810
822
 
811
- # max_zoom = self.map.max_level
812
- # min_zoom = self.map.min_level
813
- # zoom = self.map.zoom_factor
814
- # scale = 0.1 + (zoom - min_zoom) / (max_zoom - min_zoom)
815
- #
816
- # # rescale lines
817
- # for dev_tpe in [DeviceType.LineDevice,
818
- # DeviceType.DCLineDevice,
819
- # DeviceType.HVDCLineDevice,
820
- # DeviceType.FluidPathDevice]:
821
- # graphics_dict = self.graphics_manager.get_device_type_dict(device_type=dev_tpe)
822
- # for key, lne in graphics_dict.items():
823
- # lne.setWidthScale(scale)
823
+ self.Update_widths()
824
+
825
+ def Update_widths(self):
826
+
827
+ max_zoom = self.map.max_level
828
+ min_zoom = self.map.min_level
829
+ zoom = self.map.zoom_factor
830
+ scale = self.diagram.min_branch_width + (zoom - min_zoom) / (max_zoom - min_zoom)
831
+
832
+ # rescale lines
833
+ for dev_tpe in [DeviceType.LineDevice,
834
+ DeviceType.DCLineDevice,
835
+ DeviceType.HVDCLineDevice,
836
+ DeviceType.FluidPathDevice]:
837
+ graphics_dict = self.graphics_manager.get_device_type_dict(device_type=dev_tpe)
838
+ for key, lne in graphics_dict.items():
839
+ lne.setWidthScale(scale)
824
840
 
825
841
  def change_size_and_pen_width_all(self, new_radius, pen_width):
826
842
  """
@@ -1096,6 +1112,17 @@ class GridMapWidget(BaseDiagramWidget):
1096
1112
  else:
1097
1113
  raise Exception('Extension ' + str(extension) + ' not supported :(')
1098
1114
 
1115
+ def new_substation_diagram(self, substation: Substation):
1116
+ """
1117
+
1118
+ :param substation:
1119
+ :return:
1120
+ """
1121
+ if self.call_new_substation_diagram_func is not None:
1122
+ self.call_new_substation_diagram_func(substation)
1123
+ else:
1124
+ print("call_new_substation_diagram_func is None :( ")
1125
+
1099
1126
 
1100
1127
  def generate_map_diagram(substations: List[Substation],
1101
1128
  voltage_levels: List[VoltageLevel],