GridCal 5.3.2__tar.gz → 5.3.4__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 (288) hide show
  1. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +8 -1
  2. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_infra_map.py +102 -0
  3. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +76 -9
  4. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +19 -8
  5. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +26 -4
  6. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +3 -3
  7. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +15 -5
  8. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/base_gui.py +3 -1
  9. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/io.py +5 -6
  10. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/gui_functions.py +10 -0
  11. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/__version__.py +1 -1
  12. {gridcal-5.3.2 → gridcal-5.3.4}/PKG-INFO +1 -1
  13. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ExecuteGridCal.py +0 -0
  14. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  15. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  16. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  17. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  18. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  19. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  20. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/__init__.py +0 -0
  21. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/gui.py +0 -0
  22. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  23. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  24. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  25. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  26. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  27. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  28. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  29. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  30. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  31. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  32. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  33. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  34. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  35. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  36. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  37. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  38. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  39. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  40. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  41. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  42. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  43. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  44. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  45. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  46. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  47. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  48. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  49. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
  50. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  51. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  52. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  53. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  54. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
  55. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
  56. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
  57. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +0 -0
  58. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
  59. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
  60. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
  61. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  62. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  63. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  64. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  65. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  66. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  67. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  68. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  69. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  70. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  71. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  72. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  73. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  74. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  75. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  76. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
  77. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  78. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  79. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  80. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  81. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  82. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  83. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  84. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  85. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  86. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  87. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  88. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  89. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  90. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  91. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  92. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  93. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  94. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  95. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  96. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  97. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  98. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  99. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  100. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  101. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  102. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  103. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  104. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  105. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  106. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  107. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  108. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  109. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/__init__.py +0 -0
  110. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  111. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  112. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  113. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  114. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  115. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  116. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/gui.py +0 -0
  117. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  118. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  119. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  120. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  121. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  122. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  123. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  124. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  125. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  126. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  127. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  128. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  129. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  130. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  131. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/GridCalMain.py +0 -0
  132. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/MainWindow.py +0 -0
  133. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  134. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  135. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  136. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  137. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  138. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  139. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  140. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  141. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  142. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  143. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  144. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  145. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  146. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  147. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  148. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
  149. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/__init__.py +0 -0
  150. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/icons_rc.py +0 -0
  151. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/object_select_window.py +0 -0
  152. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/update_gui_file.py +0 -0
  153. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  154. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  155. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  156. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  157. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  158. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  159. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  160. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  161. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  162. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  163. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  164. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  165. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  166. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  167. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  168. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  169. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  170. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  171. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  172. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  173. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  174. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  175. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  176. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  177. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  178. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  179. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  180. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  181. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  182. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  183. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  184. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  185. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  186. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  187. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  188. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  189. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  190. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  191. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  192. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  193. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  194. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  195. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  196. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  197. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  198. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  199. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  200. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  201. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  202. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  203. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  204. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  205. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Visualization/__init__.py +0 -0
  206. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Visualization/visualization.py +0 -0
  207. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Widgets/__init__.py +0 -0
  208. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  209. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  210. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  211. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  212. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  213. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  214. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  215. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/__init__.py +0 -0
  216. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/associations_model.py +0 -0
  217. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/console_widget.py +0 -0
  218. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/general_dialogues.py +0 -0
  219. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/messages.py +0 -0
  220. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/object_model.py +0 -0
  221. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/pandas_model.py +0 -0
  222. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/plot_config.py +0 -0
  223. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/profiles_model.py +0 -0
  224. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/results_model.py +0 -0
  225. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/table_view_header_wrap.py +0 -0
  226. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/themes.py +0 -0
  227. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/update_gui_all.py +0 -0
  228. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/update_gui_common.py +0 -0
  229. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/wrappable_table_model.py +0 -0
  230. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/LICENSE.txt +0 -0
  231. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/__init__.py +0 -0
  232. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/export_results_driver.py +0 -0
  233. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/file_handler.py +0 -0
  234. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/server_driver.py +0 -0
  235. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/session.py +0 -0
  236. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/synchronization_driver.py +0 -0
  237. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/__init__.py +0 -0
  238. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  239. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  240. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  241. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  242. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  243. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  244. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  245. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  246. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  247. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  248. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  249. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  250. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  251. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  252. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  253. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  254. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  255. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  256. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  257. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  258. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  259. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  260. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  261. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  262. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  263. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  264. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  265. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  266. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  267. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  268. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  269. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  270. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  271. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  272. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  273. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  274. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  275. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  276. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/__init__.py +0 -0
  277. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/GridCal.ico +0 -0
  278. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/GridCal.svg +0 -0
  279. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/__init__.py +0 -0
  280. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/cables.csv +0 -0
  281. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/sequence_lines.csv +0 -0
  282. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/transformers.csv +0 -0
  283. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/wires.csv +0 -0
  284. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/plugins.py +0 -0
  285. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/templates.py +0 -0
  286. {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/update.py +0 -0
  287. {gridcal-5.3.2 → gridcal-5.3.4}/setup.cfg +0 -0
  288. {gridcal-5.3.2 → gridcal-5.3.4}/setup.py +0 -0
@@ -211,6 +211,9 @@ class MapLineContainer(GenericDiagramWidget):
211
211
  connection_elements.append(substation_to_graphics)
212
212
  substation_to_graphics.line_container = self
213
213
 
214
+ br_scale = self.editor.get_branch_width()
215
+ arrow_scale = self.editor.get_arrow_scale()
216
+
214
217
  # second pass: create the segments
215
218
  for i in range(1, len(connection_elements)):
216
219
  elm1 = connection_elements[i - 1]
@@ -223,15 +226,19 @@ class MapLineContainer(GenericDiagramWidget):
223
226
  elm2.needsUpdate = True
224
227
  segment_graphic_object.needsUpdate = True
225
228
 
229
+ segment_graphic_object.set_width(br_scale * segment_graphic_object.width) # Assign the pen to the line item
230
+ segment_graphic_object.set_arrow_scale(arrow_scale)
231
+
226
232
  # register the segment in the line
227
233
  self.add_segment(segment=segment_graphic_object)
228
234
 
229
235
  # draw the segment in the scene
230
236
  self.editor.add_to_scene(graphic_object=segment_graphic_object)
231
237
 
238
+
232
239
  self.update_connectors()
233
240
 
234
- self.editor.update_device_sizes()
241
+ # self.editor.update_device_sizes()
235
242
 
236
243
  def substation_to(self):
237
244
  """
@@ -0,0 +1,102 @@
1
+ # MIT License
2
+ #
3
+ # Copyright (c) 2018 Ross Wilson
4
+ # Copyright (c) 2024, Santiago Peñate Vera
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+ """
24
+ A tile source that serves OpenStreetMap tiles from server(s).
25
+ """
26
+
27
+ import math
28
+ from typing import Tuple
29
+ from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
30
+
31
+
32
+ class OimTiles(Tiles):
33
+ """An object to source server tiles for pySlipQt."""
34
+
35
+ def __init__(self, name: str = 'OpenInfraMap Tiles', tiles_dir='open_infra_map_tiles',
36
+ http_proxy=None, tile_servers=None):
37
+ """
38
+
39
+ :param name:
40
+ :param tiles_dir:
41
+ :param http_proxy:
42
+ :param tile_servers:
43
+ """
44
+ """Override the base class for these tiles.
45
+
46
+ Basically, just fill in the BaseTiles class with values from above
47
+ and provide the Geo2Tile() and Tile2Geo() methods.
48
+ """
49
+ # https://openinframap.org/tiles/{z}/{x}/{y}.pbf
50
+ super().__init__(
51
+ TilesetName=name,
52
+ TilesetShortName='OSM Tiles',
53
+ TilesetVersion='1.0',
54
+ levels=list(range(20)),
55
+ tile_width=256,
56
+ tile_height=256,
57
+ tiles_dir=tiles_dir,
58
+ servers=[
59
+ 'https://openinframap.org/tiles',
60
+ ] if tile_servers is None else tile_servers,
61
+ url_path='/{Z}/{X}/{Y}.pbf',
62
+ max_server_requests=2,
63
+ max_lru=10000,
64
+ http_proxy=http_proxy,
65
+ attribution="© OpenStreetMap contributors, OpenInfraMap"
66
+ )
67
+ # TODO: implement map wrap-around
68
+ # self.wrap_x = True
69
+ # self.wrap_y = False
70
+
71
+ # get tile information into instance
72
+ self.level = min(self.levels)
73
+ self.num_tiles_x, self.num_tiles_y, self.ppd_x, self.ppd_y = self.GetInfo(self.level)
74
+
75
+ def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[int, int]:
76
+ """
77
+ Convert geo to tile fractional coordinates for level in use.
78
+ geo tuple of geo coordinates (xgeo, ygeo)
79
+ Note that we assume the point *is* on the map!
80
+ Code taken from [https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
81
+ """
82
+ lat_rad = math.radians(latitude)
83
+ n = 2.0 ** self.level
84
+ xtile = int((longitude + 180.0) / 360.0 * n)
85
+ ytile = int(((1.0 - math.log(math.tan(lat_rad) + (1.0 / math.cos(lat_rad))) / math.pi) / 2.0) * n)
86
+
87
+ return xtile, ytile
88
+
89
+ def Tile2Geo(self, xtile: float, ytile: float) -> Tuple[float, float]:
90
+ """
91
+ Convert tile fractional coordinates to geo for level in use.
92
+ tile a tuple (xtile,ytile) of tile fractional coordinates
93
+ Note that we assume the point *is* on the map!
94
+ Code taken from [https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
95
+ """
96
+
97
+ n = 2.0 ** self.level
98
+ xgeo = xtile / n * 360.0 - 180.0
99
+ yrad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
100
+ ygeo = math.degrees(yrad)
101
+
102
+ return xgeo, ygeo
@@ -28,11 +28,10 @@ For example, see osm_tiles.py.
28
28
  """
29
29
  import queue
30
30
  import ssl
31
- # from urllib import request
32
31
  from urllib.request import Request, urlopen
33
32
  from collections.abc import Callable
34
- from PySide6.QtGui import QPixmap
35
33
  from PySide6.QtCore import QThread
34
+ from PySide6.QtGui import QPixmap
36
35
 
37
36
  # SSL magic to solve the certificates hell
38
37
  # https://stackoverflow.com/questions/68275857/urllib-error-urlerror-urlopen-error-ssl-certificate-verify-failed-certifica
@@ -43,18 +42,86 @@ def log(val: str):
43
42
  print(val)
44
43
 
45
44
 
45
+
46
+
47
+ # class OsmHandler(osm.SimpleHandler):
48
+ # def __init__(self):
49
+ # super().__init__()
50
+ # self.nodes = []
51
+ # self.ways = []
52
+ #
53
+ # def node(self, n):
54
+ # self.nodes.append((n.location.lat, n.location.lon))
55
+ #
56
+ # def way(self, w):
57
+ # self.ways.append([node.ref for node in w.nodes])
58
+ #
59
+ #
60
+ # def render_pbf_to_pixmap(pbf_file: str, width=800, height=800) -> QPixmap:
61
+ # """
62
+ #
63
+ # :param pbf_file:
64
+ # :param width:
65
+ # :param height:
66
+ # :return:
67
+ # """
68
+ # # Parse the .pbf file
69
+ # handler = OsmHandler()
70
+ # handler.apply_file(pbf_file)
71
+ #
72
+ # # Setup Mercator projection
73
+ # mercator_proj = Proj("epsg:3857")
74
+ #
75
+ # # Create a QPixmap and painter
76
+ # pixmap = QPixmap(width, height)
77
+ # pixmap.fill(Qt.GlobalColor.white)
78
+ # painter = QPainter(pixmap)
79
+ # painter.setPen(QPen(Qt.GlobalColor.black, 1))
80
+ #
81
+ # # Scale coordinates to fit the pixmap
82
+ # bounds = {
83
+ # 'min_x': float('inf'), 'max_x': float('-inf'),
84
+ # 'min_y': float('inf'), 'max_y': float('-inf')
85
+ # }
86
+ # transformed_nodes = []
87
+ #
88
+ # for lat, lon in handler.nodes:
89
+ # x, y = mercator_proj(lon, lat)
90
+ # transformed_nodes.append((x, y))
91
+ # bounds['min_x'] = min(bounds['min_x'], x)
92
+ # bounds['max_x'] = max(bounds['max_x'], x)
93
+ # bounds['min_y'] = min(bounds['min_y'], y)
94
+ # bounds['max_y'] = max(bounds['max_y'], y)
95
+ #
96
+ # x_range = bounds['max_x'] - bounds['min_x']
97
+ # y_range = bounds['max_y'] - bounds['min_y']
98
+ # scale_x = width / x_range if x_range else 1
99
+ # scale_y = height / y_range if y_range else 1
100
+ # scale = min(scale_x, scale_y)
101
+ #
102
+ # # Render nodes as points
103
+ # for x, y in transformed_nodes:
104
+ # scaled_x = int((x - bounds['min_x']) * scale)
105
+ # scaled_y = int((y - bounds['min_y']) * scale)
106
+ # painter.drawPoint(scaled_x, height - scaled_y) # Flip y-axis for Qt's coordinate system
107
+ #
108
+ # # Close the painter
109
+ # painter.end()
110
+ # return pixmap
111
+
112
+
46
113
  class TileWorker(QThread):
47
114
  """Thread class that gets request from queue, loads tile, calls callback."""
48
115
 
49
116
  def __init__(self,
50
117
  id_num: int,
51
118
  server: str,
52
- tilepath: str,
119
+ tile_path: str,
53
120
  requests_cue: queue.Queue,
54
121
  callback: Callable[[int, float, float, QPixmap, bool], None], # level, x, y, pixmap, error
55
122
  error_tile: QPixmap,
56
123
  content_type: str,
57
- rerequest_age: float,
124
+ re_request_age: float,
58
125
  error_image: QPixmap,
59
126
  refresh_tiles_after_days=60):
60
127
  """
@@ -62,12 +129,12 @@ class TileWorker(QThread):
62
129
  Results are returned in the callback() params.
63
130
  :param id_num: a unique numer identifying the worker instance
64
131
  :param server: server URL
65
- :param tilepath: path to tile on server
132
+ :param tile_path: path to tile on server
66
133
  :param requests_cue: the request queue
67
134
  :param callback: function to call after tile available
68
135
  :param error_tile: image of error tile
69
136
  :param content_type: expected Content-Type string
70
- :param rerequest_age: number of days in tile age before re-requesting (0 means don't update tiles)
137
+ :param re_request_age: number of days in tile age before re-requesting (0 means don't update tiles)
71
138
  :param error_image: the image to return on some error
72
139
  :param refresh_tiles_after_days:
73
140
  """
@@ -76,12 +143,12 @@ class TileWorker(QThread):
76
143
 
77
144
  self.id_num = id_num
78
145
  self.server = server
79
- self.tilepath = tilepath
146
+ self.tile_path = tile_path
80
147
  self.requests_cue = requests_cue
81
148
  self.callback: Callable[[int, float, float, QPixmap, bool], None] = callback
82
149
  self.error_tile_image = error_tile
83
150
  self.content_type = content_type
84
- self.rerequest_age = rerequest_age
151
+ self.re_request_age = re_request_age
85
152
  self.error_image = error_image
86
153
  self.daemon = True
87
154
  self.refresh_tiles_after_days = refresh_tiles_after_days
@@ -98,7 +165,7 @@ class TileWorker(QThread):
98
165
  # try to retrieve the image
99
166
  error = False
100
167
  pixmap = self.error_image
101
- tile_url = self.server + self.tilepath.format(Z=level, X=x, Y=y)
168
+ tile_url = self.server + self.tile_path.format(Z=level, X=x, Y=y)
102
169
  try:
103
170
 
104
171
  # Create a Request object with the desired headers
@@ -35,7 +35,8 @@ import urllib
35
35
  from urllib import request
36
36
  from urllib.error import HTTPError
37
37
  import queue
38
- from PySide6.QtGui import QPixmap, QColor
38
+ from PySide6.QtGui import QPixmap, QPainter, QPen, QColor
39
+
39
40
  from typing import List, Union
40
41
  from collections.abc import Callable
41
42
  from GridCal.Gui.Diagrams.MapWidget.Tiles.base_tiles import BaseTiles
@@ -57,13 +58,19 @@ StatusError = {401: 'Looks like you need to be authorised for this server.',
57
58
  429: 'You are asking for too many tiles.', }
58
59
 
59
60
 
61
+
62
+
63
+
64
+
65
+
66
+
60
67
  class Tiles(BaseTiles):
61
68
  """
62
69
  A tile object to source server tiles for the widget.
63
70
  """
64
71
 
65
72
  # allowed file types and associated values
66
- AllowedFileTypes = {'png': 'PNG', 'jpg': 'JPG'}
73
+ AllowedFileTypes = {'png': 'PNG', 'jpg': 'JPG', 'pbf': 'PBF'}
67
74
 
68
75
  # the number of seconds in a day
69
76
  SecondsInADay = 60 * 60 * 24
@@ -149,10 +156,9 @@ class Tiles(BaseTiles):
149
156
 
150
157
  # compose the expected 'Content-Type' string on request result
151
158
  # if we get here we know the extension is in self.AllowedFileTypes
152
- if tile_extension_lower == 'jpg':
153
- self.content_type = 'image/jpeg'
154
- elif tile_extension_lower == 'png':
155
- self.content_type = 'image/png'
159
+ # if tile_extension_lower in ['png', 'jpg']:
160
+
161
+ self.content_type = 'image/png'
156
162
 
157
163
  # set the list of queued unsatisfied requests to 'empty'
158
164
  self.queued_requests = {}
@@ -166,6 +172,11 @@ class Tiles(BaseTiles):
166
172
  self.error_tile.fill(QColor.fromRgb(255, 0, 0, 255))
167
173
  # self.error_tile.loadFromData(std.getErrorImage())
168
174
 
175
+ # Usage
176
+ # pbf_file = "your_file.pbf"
177
+ # pixmap = render_pbf_to_pixmap(pbf_file)
178
+ # pixmap.save("output_map.png")
179
+
169
180
  # test for firewall - use proxy (if supplied)
170
181
  test_url = self.servers[0] + self.url_path.format(Z=0, X=0, Y=0)
171
182
  try:
@@ -209,12 +220,12 @@ class Tiles(BaseTiles):
209
220
  for num_thread in range(self.max_requests):
210
221
  worker = TileWorker(id_num=num_thread,
211
222
  server=server,
212
- tilepath=self.url_path,
223
+ tile_path=self.url_path,
213
224
  requests_cue=self.request_queue,
214
225
  callback=self.tile_is_available,
215
226
  error_tile=self.error_tile,
216
227
  content_type=self.content_type,
217
- rerequest_age=self.rerequest_age,
228
+ re_request_age=self.rerequest_age,
218
229
  error_image=self.error_tile,
219
230
  refresh_tiles_after_days=60)
220
231
  self.workers.append(worker)
@@ -4,17 +4,19 @@
4
4
  # SPDX-License-Identifier: MPL-2.0
5
5
  from __future__ import annotations
6
6
  import os
7
- from typing import Union, List, Tuple, Dict, TYPE_CHECKING
7
+ from typing import Union, List, Tuple, Dict, TYPE_CHECKING, Any
8
8
  import json
9
9
  import numpy as np
10
10
  import math
11
11
  import pandas as pd
12
+ import asyncio
12
13
  from matplotlib import pyplot as plt
13
14
 
14
15
  from PySide6.QtWidgets import QGraphicsItem
15
16
  from collections.abc import Callable
16
17
  from PySide6.QtSvg import QSvgGenerator
17
- from PySide6.QtCore import (Qt, QSize, QRect, QMimeData, QIODevice, QByteArray, QDataStream, QModelIndex)
18
+ from PySide6.QtCore import (Qt, QSize, QRect, QMimeData, QIODevice, QByteArray, QDataStream, QModelIndex,
19
+ QRunnable, QThreadPool, Slot)
18
20
  from PySide6.QtGui import (QIcon, QPixmap, QImage, QPainter, QStandardItemModel, QStandardItem, QColor,
19
21
  QDropEvent, QWheelEvent)
20
22
 
@@ -258,6 +260,10 @@ class GridMapWidget(BaseDiagramWidget):
258
260
  self.startWi = self.map.view.width()
259
261
  self.constantLineWidth = True
260
262
 
263
+ # pool of runnable tasks that work best done asynch with a runnable
264
+ self.thread_pool = QThreadPool()
265
+ self.wheel_move_task: QRunnable | None = None
266
+
261
267
  # draw
262
268
  self.draw()
263
269
 
@@ -897,6 +903,7 @@ class GridMapWidget(BaseDiagramWidget):
897
903
  # SANTIAGO: DO NOT TOUCH, THIS IS THE DESIRED BEHAVIOUR
898
904
  self.update_device_sizes()
899
905
 
906
+
900
907
  def get_branch_width(self) -> float:
901
908
  """
902
909
  Get the desired branch width
@@ -930,12 +937,27 @@ class GridMapWidget(BaseDiagramWidget):
930
937
  scale = self.diagram.min_bus_width + (zoom - min_zoom) / (max_zoom - min_zoom)
931
938
  return scale
932
939
 
933
- def update_device_sizes(self) -> None:
940
+ def update_device_sizes(self, asynchronously: bool = True) -> None:
934
941
  """
935
- Updat ethe devices' sizes
942
+ Caller to the asynchronous device update sizes
936
943
  :return:
937
944
  """
945
+ if asynchronously:
946
+ try:
947
+ loop = asyncio.get_event_loop()
948
+ self.wheel_move_task = loop.create_task(self.__update_device_sizes())
949
+ except RuntimeError:
950
+ pass
951
+ else:
952
+ # do it now
953
+ asyncio.run(self.__update_device_sizes())
938
954
 
955
+ async def __update_device_sizes(self) -> None:
956
+ """
957
+ Update the devices' sizes
958
+ :return:
959
+ """
960
+ print('Updating device sizes!')
939
961
  br_scale = self.get_branch_width()
940
962
  arrow_scale = self.get_arrow_scale()
941
963
  se_scale = self.get_substation_scale()
@@ -49,7 +49,7 @@ ygeo: latitude
49
49
  from __future__ import annotations
50
50
  from typing import List, Union, Tuple, Callable, TYPE_CHECKING
51
51
  from enum import Enum
52
- from PySide6.QtCore import Qt, QTimer, QEvent, QPointF
52
+ from PySide6.QtCore import Qt, QEvent, QPointF
53
53
  from PySide6.QtGui import (QPainter, QColor, QPixmap, QCursor,
54
54
  QMouseEvent, QKeyEvent, QWheelEvent,
55
55
  QResizeEvent, QEnterEvent, QPaintEvent, QDragEnterEvent, QDragMoveEvent, QDropEvent)
@@ -510,13 +510,13 @@ class MapWidget(QWidget):
510
510
  self.setCursor(self.standard_cursor)
511
511
 
512
512
  # do a "resize" after this function
513
- QTimer.singleShot(10, self.resizeEvent)
513
+ # QTimer.singleShot(10, self.resizeEvent)
514
514
 
515
515
  self.GotoLevelAndPosition(level=6,
516
516
  longitude=0,
517
517
  latitude=40)
518
518
 
519
- # add the widgets in a leyered manner
519
+ # add the widgets in a layered manner
520
520
  # self.layout.addWidget(self.notice_widget)
521
521
  self.layout.addWidget(self.view) # Add the QGraphicsView to the layout
522
522
 
@@ -41,6 +41,7 @@ from GridCal.Gui.Main.object_select_window import ObjectSelectWindow
41
41
  from GridCal.Gui.Diagrams.MapWidget.Tiles.TileProviders.blue_marble import BlueMarbleTiles
42
42
  from GridCal.Gui.Diagrams.MapWidget.Tiles.TileProviders.cartodb import CartoDbTiles
43
43
  from GridCal.Gui.Diagrams.MapWidget.Tiles.TileProviders.open_street_map import OsmTiles
44
+ from GridCal.Gui.Diagrams.MapWidget.Tiles.TileProviders.open_infra_map import OimTiles
44
45
 
45
46
  ALL_EDITORS = Union[SchematicWidget, GridMapWidget]
46
47
  ALL_EDITORS_NONE = Union[None, SchematicWidget, GridMapWidget]
@@ -160,23 +161,28 @@ class DiagramsMain(CompiledArraysMain):
160
161
  CartoDbTiles(
161
162
  name='Carto voyager',
162
163
  tiles_dir=os.path.join(tiles_path(), 'carto_db_voyager'),
163
- tile_servers=["http://basemaps.cartocdn.com/rastertiles/voyager/"]
164
+ tile_servers=["https://basemaps.cartocdn.com/rastertiles/voyager/"]
164
165
  ),
165
166
  CartoDbTiles(
166
167
  name='Carto positron',
167
168
  tiles_dir=os.path.join(tiles_path(), 'carto_db_positron'),
168
- tile_servers=['http://basemaps.cartocdn.com/light_all/']
169
+ tile_servers=['https://basemaps.cartocdn.com/light_all/']
169
170
  ),
170
171
  CartoDbTiles(
171
172
  name='Carto dark matter',
172
173
  tiles_dir=os.path.join(tiles_path(), 'carto_db_dark_matter'),
173
- tile_servers=["http://basemaps.cartocdn.com/dark_all/"]
174
+ tile_servers=["https://basemaps.cartocdn.com/dark_all/"]
174
175
  ),
175
176
  OsmTiles(
176
177
  name='Open Street Map',
177
178
  tiles_dir=os.path.join(tiles_path(), 'osm'),
178
179
  tile_servers=["https://tile.openstreetmap.org"]
179
- )
180
+ ),
181
+ # OimTiles(
182
+ # name='Open infra Map',
183
+ # tiles_dir=os.path.join(tiles_path(), 'osm'),
184
+ # tile_servers=["https://openinframap.org/tiles"]
185
+ # )
180
186
  ]
181
187
  tile_names = [tile.TilesetName for tile in self.tile_sources]
182
188
  self.tile_index_dict = {tile.TilesetName: i for i, tile in enumerate(self.tile_sources)}
@@ -1526,7 +1532,7 @@ class DiagramsMain(CompiledArraysMain):
1526
1532
  diagram_widget.set_data(circuit=self.circuit, diagram=diagram)
1527
1533
 
1528
1534
  elif isinstance(diagram_widget, GridMapWidget):
1529
- diagram_widget.update_device_sizes()
1535
+ diagram_widget.update_device_sizes(asynchronously=False)
1530
1536
 
1531
1537
  def set_selected_diagram_on_click(self):
1532
1538
  """
@@ -1795,6 +1801,10 @@ class DiagramsMain(CompiledArraysMain):
1795
1801
 
1796
1802
  self.set_diagrams_list_view()
1797
1803
 
1804
+ if len(self.diagram_widgets_list) > 0:
1805
+ diagram = self.diagram_widgets_list[0]
1806
+ self.set_diagram_widget(diagram)
1807
+
1798
1808
  def add_map_diagram(self, ask: bool = True) -> None:
1799
1809
  """
1800
1810
  Adds a Map diagram
@@ -149,6 +149,8 @@ class BaseMainGui(QMainWindow):
149
149
  self.find_node_groups_driver: Union[sim.NodeGroupsDriver, None] = None
150
150
  self.file_sync_thread = syncdrv.FileSyncThread(self.circuit, None, None)
151
151
 
152
+ self.task_pool = QtCore.QThreadPool()
153
+
152
154
  # simulation start end
153
155
  self.simulation_start_index: int = -1
154
156
  self.simulation_end_index: int = -1
@@ -229,7 +231,7 @@ class BaseMainGui(QMainWindow):
229
231
 
230
232
  self.ui.grid_name_line_edit.textChanged.connect(self.change_circuit_name)
231
233
 
232
- # comboboxes
234
+ # combo-boxes
233
235
  self.ui.fromComboBox.currentTextChanged.connect(self.update_from_to_list_views)
234
236
  self.ui.toComboBox.currentTextChanged.connect(self.update_from_to_list_views)
235
237
 
@@ -4,6 +4,7 @@
4
4
  # SPDX-License-Identifier: MPL-2.0
5
5
 
6
6
  import os
7
+ import asyncio
7
8
  from typing import Union, List, Callable
8
9
  import pandas as pd
9
10
  from PySide6 import QtWidgets
@@ -51,7 +52,7 @@ class IoMain(ConfigurationMain):
51
52
  self.rosetta_gui: Union[RosetaExplorerGUI, None] = None
52
53
 
53
54
  self.accepted_extensions = ['.gridcal', '.dgridcal', '.xlsx', '.xls', '.sqlite', '.gch5',
54
- '.dgs', '.m', '.raw', '.RAW', '.json',
55
+ '.dgs', '.m', '.raw', '.RAW', '.json', '.uct',
55
56
  '.ejson2', '.ejson3', '.p', '.nc', '.hdf5',
56
57
  '.xml', '.rawx', '.zip', '.dpx', '.epc', '.EPC',
57
58
  '.gcplugin']
@@ -261,7 +262,7 @@ class IoMain(ConfigurationMain):
261
262
  files_types += "*.dgridcal "
262
263
 
263
264
  files_types += "*.gch5 *.xlsx *.xls *.sqlite *.dgs "
264
- files_types += "*.m *.raw *.RAW *.rawx *.json *.ejson2 *.ejson3 *.xml "
265
+ files_types += "*.m *.raw *.RAW *.rawx *.uct *.json *.ejson2 *.ejson3 *.xml "
265
266
  files_types += "*.zip *.dpx *.epc *.EPC *.nc *.hdf5 *.p"
266
267
 
267
268
  dialogue = QtWidgets.QFileDialog(None,
@@ -343,12 +344,10 @@ class IoMain(ConfigurationMain):
343
344
 
344
345
  if self.circuit.has_diagrams():
345
346
  # create the diagrams that came with the file
347
+ # task = gf.AsyncTask(self.create_circuit_stored_diagrams)
348
+ # self.task_pool.start(task)
346
349
  self.create_circuit_stored_diagrams()
347
350
 
348
- if len(self.diagram_widgets_list) > 0:
349
- diagram = self.diagram_widgets_list[0]
350
- self.set_diagram_widget(diagram)
351
-
352
351
  else:
353
352
  if self.circuit.get_bus_number() > 300:
354
353
  quit_msg = ("The grid is quite large, hence the schematic might be slow.\n"
@@ -1001,3 +1001,13 @@ def create_int_spinbox(value: int, minimum: int, maximum: int) -> QtWidgets.QSpi
1001
1001
  sn_spinner.setMaximum(maximum)
1002
1002
  sn_spinner.setValue(value)
1003
1003
  return sn_spinner
1004
+
1005
+
1006
+ class AsyncTask(QtCore.QRunnable):
1007
+ def __init__(self, task):
1008
+ super().__init__()
1009
+ self.task = task
1010
+
1011
+ @QtCore.Slot()
1012
+ def run(self):
1013
+ self.task()
@@ -6,7 +6,7 @@ import datetime
6
6
  _current_year_ = datetime.datetime.now().year
7
7
 
8
8
  # do not forget to keep a three-number version!!!
9
- __GridCal_VERSION__ = "5.3.2"
9
+ __GridCal_VERSION__ = "5.3.4"
10
10
 
11
11
  url = 'https://github.com/SanPen/GridCal'
12
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: GridCal
3
- Version: 5.3.2
3
+ Version: 5.3.4
4
4
  Summary: GridCal is a Power Systems simulation program intended for professional use and research
5
5
  Home-page: https://github.com/SanPen/GridCal
6
6
  Author: Santiago Peñate Vera et. Al.