GridCal 5.1.34__tar.gz → 5.1.36__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/object_plot_analysis.py +26 -2
  2. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +3 -3
  3. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +3 -3
  4. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +10 -3
  5. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +13 -8
  6. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +4 -4
  7. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +3 -3
  8. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +49 -180
  9. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/base_diagram_widget.py +1 -1
  10. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/MainWindow.py +226 -230
  11. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +50 -29
  12. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/io.py +39 -22
  13. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/simulations.py +8 -5
  14. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/icons_rc.py +2 -2
  15. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/__version__.py +1 -1
  16. {GridCal-5.1.34 → GridCal-5.1.36}/PKG-INFO +1 -1
  17. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ExecuteGridCal.py +0 -0
  18. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  19. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  20. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  21. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  22. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  23. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  24. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/__init__.py +0 -0
  25. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/gui.py +0 -0
  26. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  27. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  28. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  29. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  30. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  31. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  32. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  33. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  34. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  35. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  36. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  37. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  38. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  39. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  40. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  41. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  42. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  43. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  44. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  45. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  46. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  47. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  48. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  49. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  50. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  51. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  52. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  53. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  54. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  55. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  56. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
  57. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
  58. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
  59. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
  60. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
  61. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
  62. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  63. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  64. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  65. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  66. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  67. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  68. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  69. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  70. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  71. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  72. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  73. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  74. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  75. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  76. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  77. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  78. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  79. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  80. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  81. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  82. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  83. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  84. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  85. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  86. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  87. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  88. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  89. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  90. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  91. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  92. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  93. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  94. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  95. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  96. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  97. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  98. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  99. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  100. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  101. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  102. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  103. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  104. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  105. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  106. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  107. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  108. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  109. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/__init__.py +0 -0
  110. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  111. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  112. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  113. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  114. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  115. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/gui.py +0 -0
  116. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  117. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  118. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  119. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  120. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  121. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  122. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  123. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  124. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  125. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  126. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  127. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  128. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  129. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  130. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/GridCalMain.py +0 -0
  131. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  132. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  133. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  134. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  135. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  136. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  137. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  138. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  139. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  140. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  141. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  142. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  143. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  144. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  145. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  146. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  147. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/__init__.py +0 -0
  148. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/object_select_window.py +0 -0
  149. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/update_gui_file.py +0 -0
  150. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  151. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  152. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  153. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  154. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  155. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  156. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  157. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  158. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  159. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  160. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  161. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  162. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  163. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  164. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  165. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  166. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  167. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  168. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  169. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  170. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  171. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  172. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  173. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  174. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  175. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  176. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  177. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  178. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  179. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  180. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  181. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  182. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  183. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  184. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  185. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  186. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  187. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  188. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  189. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  190. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  191. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  192. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  193. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  194. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  195. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  196. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  197. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  198. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  199. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Visualization/__init__.py +0 -0
  200. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Visualization/visualization.py +0 -0
  201. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Widgets/__init__.py +0 -0
  202. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  203. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  204. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  205. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  206. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  207. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  208. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  209. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/__init__.py +0 -0
  210. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/associations_model.py +0 -0
  211. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/console_widget.py +0 -0
  212. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/general_dialogues.py +0 -0
  213. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/gui_functions.py +0 -0
  214. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/messages.py +0 -0
  215. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/object_model.py +0 -0
  216. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/pandas_model.py +0 -0
  217. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/plot_config.py +0 -0
  218. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/profiles_model.py +0 -0
  219. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/table_view_header_wrap.py +0 -0
  220. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/themes.py +0 -0
  221. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/update_gui_all.py +0 -0
  222. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/update_gui_common.py +0 -0
  223. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/wrappable_table_model.py +0 -0
  224. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/LICENSE.txt +0 -0
  225. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/__init__.py +0 -0
  226. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/export_results_driver.py +0 -0
  227. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/file_handler.py +0 -0
  228. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/results_model.py +0 -0
  229. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/server_driver.py +0 -0
  230. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/session.py +0 -0
  231. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/synchronization_driver.py +0 -0
  232. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/__init__.py +0 -0
  233. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  234. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  235. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  236. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  237. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  238. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  239. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  240. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  241. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  242. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  243. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  244. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  245. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  246. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  247. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  248. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  249. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  250. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  251. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  252. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  253. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  254. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  255. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  256. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  257. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  258. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  259. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  260. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  261. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  262. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  263. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  264. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  265. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  266. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  267. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  268. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  269. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  270. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  271. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/__init__.py +0 -0
  272. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/__init__.py +0 -0
  273. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/cables.csv +0 -0
  274. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/sequence_lines.csv +0 -0
  275. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/transformers.csv +0 -0
  276. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/wires.csv +0 -0
  277. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/plugins.py +0 -0
  278. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/templates.py +0 -0
  279. {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/update.py +0 -0
  280. {GridCal-5.1.34 → GridCal-5.1.36}/setup.cfg +0 -0
  281. {GridCal-5.1.34 → GridCal-5.1.36}/setup.py +0 -0
@@ -100,6 +100,22 @@ class GridErrorLog:
100
100
  """
101
101
  self.logs.clear()
102
102
 
103
+ def add_normal_logger(self, logger: Logger):
104
+ """
105
+ Add normal logger
106
+ :param logger: Logger
107
+ """
108
+ for l in logger.entries:
109
+ self.add(object_type=l.device_class,
110
+ element_name=l.device,
111
+ element_index=0,
112
+ severity=l.severity,
113
+ propty=l.device_property,
114
+ message=l.msg,
115
+ val=l.value,
116
+ lower=l.expected_object_value,
117
+ upper=l.expected_value)
118
+
103
119
  def get_model(self) -> "QtGui.QStandardItemModel":
104
120
  """
105
121
  Get TreeView Model
@@ -1043,7 +1059,7 @@ def analyze_batteries(elements: List[Battery],
1043
1059
 
1044
1060
  def analyze_static_gen(elements: List[StaticGenerator],
1045
1061
  time_profile,
1046
- logger: GridErrorLog,):
1062
+ logger: GridErrorLog, ):
1047
1063
  """
1048
1064
 
1049
1065
  :param elements:
@@ -1076,7 +1092,7 @@ def analyze_static_gen(elements: List[StaticGenerator],
1076
1092
 
1077
1093
  def analyze_load(elements: List[Load],
1078
1094
  time_profile,
1079
- logger: GridErrorLog,):
1095
+ logger: GridErrorLog, ):
1080
1096
  """
1081
1097
 
1082
1098
  :param elements:
@@ -1137,6 +1153,12 @@ def grid_analysis(circuit: MultiCircuit,
1137
1153
  :param eps_min: Min epsylon value for comparison
1138
1154
  :return: list of fixable error objects
1139
1155
  """
1156
+
1157
+ # check for duplicated uuid's
1158
+ duplicates_logger = Logger()
1159
+ _, ok_dict = circuit.get_all_elements_dict(logger=duplicates_logger)
1160
+ logger.add_normal_logger(duplicates_logger)
1161
+
1140
1162
  if circuit.time_profile is not None:
1141
1163
  nt = len(circuit.time_profile)
1142
1164
  else:
@@ -1288,6 +1310,8 @@ def grid_analysis(circuit: MultiCircuit,
1288
1310
  val=Ql_prof[t],
1289
1311
  upper=str(Qmax))
1290
1312
 
1313
+
1314
+
1291
1315
  return fixable_errors
1292
1316
 
1293
1317
 
@@ -176,7 +176,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
176
176
  if len(selected_items) < 2:
177
177
  self.setSelected(True)
178
178
  if self.enabled:
179
- self.editor.map.view.disableMove = True
179
+ self.editor.map.view.disable_move = True
180
180
  if event.button() == Qt.RightButton:
181
181
  pass
182
182
 
@@ -197,7 +197,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
197
197
  """
198
198
  Event handler for when the mouse enters the item.
199
199
  """
200
- self.editor.map.view.inItem = True
200
+ # self.editor.map.view.in_item = True
201
201
  self.hovered = True
202
202
  self.setNodeColor(QColor(Qt.red), QColor(Qt.red))
203
203
  QApplication.instance().setOverrideCursor(Qt.PointingHandCursor)
@@ -206,7 +206,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
206
206
  """
207
207
  Event handler for when the mouse leaves the item.
208
208
  """
209
- self.editor.map.view.inItem = False
209
+ # self.editor.map.view.in_item = False
210
210
  self.hovered = False
211
211
  self.setDefaultColor()
212
212
  QApplication.instance().restoreOverrideCursor()
@@ -190,7 +190,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
190
190
  self.setSelected(True)
191
191
 
192
192
  event.setAccepted(True)
193
- self.editor.map.view.disableMove = True
193
+ self.editor.map.view.disable_move = True
194
194
 
195
195
  if self.api_object is not None:
196
196
  self.editor.set_editor_model(api_object=self.api_object)
@@ -208,7 +208,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
208
208
  """
209
209
  Event handler for when the mouse enters the item.
210
210
  """
211
- self.editor.map.view.inItem = True
211
+ # self.editor.map.view.in_item = True
212
212
  self.setNodeColor(QColor(Qt.red), QColor(Qt.red))
213
213
  self.hovered = True
214
214
  QApplication.instance().setOverrideCursor(Qt.PointingHandCursor)
@@ -217,7 +217,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
217
217
  """
218
218
  Event handler for when the mouse leaves the item.
219
219
  """
220
- self.editor.map.view.inItem = False
220
+ # self.editor.map.view.in_item = False
221
221
  self.hovered = False
222
222
  self.setDefaultColor()
223
223
  QApplication.instance().restoreOverrideCursor()
@@ -10,14 +10,21 @@ from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
10
10
  class OsmTiles(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):
13
+ def __init__(self, name: str = 'OpenStreetMap Tiles', tiles_dir='open_street_map_tiles', http_proxy=None, tile_servers=None):
14
+ """
15
+
16
+ :param name:
17
+ :param tiles_dir:
18
+ :param http_proxy:
19
+ :param tile_servers:
20
+ """
14
21
  """Override the base class for these tiles.
15
22
 
16
23
  Basically, just fill in the BaseTiles class with values from above
17
24
  and provide the Geo2Tile() and Tile2Geo() methods.
18
25
  """
19
26
 
20
- super().__init__(TilesetName='OpenStreetMap Tiles',
27
+ super().__init__(TilesetName=name,
21
28
  TilesetShortName='OSM Tiles',
22
29
  TilesetVersion='1.0',
23
30
  levels=list(range(17)),
@@ -30,7 +37,7 @@ class OsmTiles(Tiles):
30
37
  # 'https://a.tile.openstreetmap.org',
31
38
  # 'https://b.tile.openstreetmap.org',
32
39
  # 'https://c.tile.openstreetmap.org',
33
- ],
40
+ ] if tile_servers is None else tile_servers,
34
41
  url_path='/{Z}/{X}/{Y}.png',
35
42
  max_server_requests=2,
36
43
  max_lru=10000,
@@ -6,7 +6,8 @@ For example, see osm_tiles.py.
6
6
  """
7
7
  import queue
8
8
  import ssl
9
- from urllib import request
9
+ # from urllib import request
10
+ from urllib.request import Request, urlopen
10
11
  from collections.abc import Callable
11
12
  from PySide6.QtGui import QPixmap
12
13
  from PySide6.QtCore import QThread
@@ -27,7 +28,7 @@ class TileWorker(QThread):
27
28
  id_num: int,
28
29
  server: str,
29
30
  tilepath: str,
30
- requests: queue.Queue,
31
+ requests_cue: queue.Queue,
31
32
  callback: Callable[[int, float, float, QPixmap, bool], None], # level, x, y, pixmap, error
32
33
  error_tile: QPixmap,
33
34
  content_type: str,
@@ -40,7 +41,7 @@ class TileWorker(QThread):
40
41
  :param id_num: a unique numer identifying the worker instance
41
42
  :param server: server URL
42
43
  :param tilepath: path to tile on server
43
- :param requests: the request queue
44
+ :param requests_cue: the request queue
44
45
  :param callback: function to call after tile available
45
46
  :param error_tile: image of error tile
46
47
  :param content_type: expected Content-Type string
@@ -54,7 +55,7 @@ class TileWorker(QThread):
54
55
  self.id_num = id_num
55
56
  self.server = server
56
57
  self.tilepath = tilepath
57
- self.requests = requests
58
+ self.requests_cue = requests_cue
58
59
  self.callback: Callable[[int, float, float, QPixmap, bool], None] = callback
59
60
  self.error_tile_image = error_tile
60
61
  self.content_type = content_type
@@ -70,15 +71,19 @@ class TileWorker(QThread):
70
71
  """
71
72
  while True:
72
73
  # get zoom level and tile coordinates to retrieve
73
- (level, x, y) = self.requests.get()
74
+ (level, x, y) = self.requests_cue.get()
74
75
 
75
76
  # try to retrieve the image
76
77
  error = False
77
78
  pixmap = self.error_image
78
79
  try:
79
80
  tile_url = self.server + self.tilepath.format(Z=level, X=x, Y=y)
80
- response = request.urlopen(tile_url)
81
+
82
+ # Create a Request object with the desired headers
83
+ response = urlopen(Request(tile_url, headers={'User-Agent': 'GridCal 5'}))
84
+
81
85
  content_type = response.info().get_content_type()
86
+
82
87
  if content_type == self.content_type:
83
88
  data = response.read()
84
89
  pixmap = QPixmap()
@@ -88,11 +93,11 @@ class TileWorker(QThread):
88
93
  error = True
89
94
  except Exception as e:
90
95
  error = True
91
- log('%s exception getting tile (%d,%d,%d)' % (type(e).__name__, level, x, y))
96
+ log(f"{e} exception getting tile ({level},{x},{y}) with {tile_url}")
92
97
 
93
98
  # call the callback function passing level, x, y and pixmap data
94
99
  # error is False if we want to cache this tile on-disk
95
100
  self.callback(level, x, y, pixmap, error)
96
101
 
97
102
  # finally, removes request from queue
98
- self.requests.task_done()
103
+ self.requests_cue.task_done()
@@ -147,9 +147,9 @@ class Tiles(BaseTiles):
147
147
  # test for firewall - use proxy (if supplied)
148
148
  test_url = self.servers[0] + self.url_path.format(Z=0, X=0, Y=0)
149
149
  try:
150
- # r = request.Request(test_url, headers={'User-Agent': 'Nokia (PyQt) Graphics Dojo 1.0'})
151
- # response = request.urlopen(r).read()
152
- request.urlopen(test_url)
150
+ r = request.Request(test_url, headers={'User-Agent': 'GridCal 5'})
151
+ response = request.urlopen(r).read()
152
+ # request.urlopen(test_url)
153
153
  except HTTPError as e:
154
154
  # if it's fatal, log it and die, otherwise try a proxy
155
155
  status_code = e.code
@@ -188,7 +188,7 @@ class Tiles(BaseTiles):
188
188
  worker = TileWorker(id_num=num_thread,
189
189
  server=server,
190
190
  tilepath=self.url_path,
191
- requests=self.request_queue,
191
+ requests_cue=self.request_queue,
192
192
  callback=self.tile_is_available,
193
193
  error_tile=self.error_tile,
194
194
  content_type=self.content_type,
@@ -1126,10 +1126,10 @@ class GridMapWidget(BaseDiagramWidget):
1126
1126
  #
1127
1127
  # painter = QPainter(image)
1128
1128
  # painter.setRenderHint(QPainter.Antialiasing)
1129
- # # self.view.render(painter) # self.view stores the grid widgets
1130
- # self.render(painter)
1129
+ # self.map.view.render(painter) # self.view stores the grid widgets
1130
+ # # self.render(painter)
1131
1131
  # painter.end()
1132
- image = self.grab().toImage()
1132
+ image = self.map.grab().toImage()
1133
1133
 
1134
1134
  return image, w, h
1135
1135
 
@@ -34,7 +34,7 @@ from PySide6.QtCore import Qt, QTimer, QEvent, QPointF
34
34
  from PySide6.QtGui import (QPainter, QColor, QPixmap, QCursor,
35
35
  QMouseEvent, QKeyEvent, QWheelEvent,
36
36
  QResizeEvent, QEnterEvent, QPaintEvent, QDragEnterEvent, QDragMoveEvent, QDropEvent)
37
- from PySide6.QtWidgets import (QSizePolicy, QWidget, QGraphicsScene, QGraphicsView, QStackedLayout, QVBoxLayout,
37
+ from PySide6.QtWidgets import (QSizePolicy, QWidget, QGraphicsScene, QGraphicsView, QStackedLayout,
38
38
  QGraphicsSceneMouseEvent, QGraphicsItem, QLabel, QGraphicsProxyWidget)
39
39
 
40
40
  from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
@@ -77,7 +77,7 @@ class MapScene(QGraphicsScene):
77
77
  # print(f"Scene pressed at {event.scenePos()}")
78
78
  super().mousePressEvent(event)
79
79
 
80
- def mouseReleaseEvent(self, event):
80
+ def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent) -> None:
81
81
  """
82
82
 
83
83
  :param event:
@@ -113,19 +113,22 @@ class MapView(QGraphicsView):
113
113
  self._scene = scene
114
114
 
115
115
  self.map_widget = map_widget
116
+ self.setStyleSheet("QGraphicsView { border: none; }")
116
117
 
117
118
  # Create a QLabel
118
- self.label = QLabel("Bottom Left Label")
119
- self.label.setStyleSheet("background-color: rgba(255, 255, 0, 150);") # Semi-transparent yellow
119
+ self.attribution_label = QLabel("Bottom Left Label")
120
+ self.attribution_label.setStyleSheet("background-color: rgba(0, 0, 0, 0);"
121
+ "color: rgba(150, 150, 150, 180);"
122
+ "font-size:9pt") # Semi-transparent yellow
120
123
 
121
124
  # Create a QGraphicsProxyWidget for the QLabel
122
- self.proxy_widget = QGraphicsProxyWidget()
123
- self.proxy_widget.setWidget(self.label)
124
- # Position the QLabel within the scene
125
- self.proxy_widget.setPos(0, scene.sceneRect().height() - self.label.height()) # Bottom-left position
125
+ self.label_proxy_widget = QGraphicsProxyWidget()
126
+ self.label_proxy_widget.setWidget(self.attribution_label)
127
+ self.label_proxy_widget.setFlag(QGraphicsItem.ItemIgnoresTransformations)
128
+ self.update_label_position()
126
129
 
127
130
  # Add the proxy widget to the scene
128
- self._scene.addItem(self.proxy_widget)
131
+ self._scene.addItem(self.label_proxy_widget)
129
132
 
130
133
  self.mouse_x = None
131
134
  self.mouse_y = None
@@ -133,9 +136,9 @@ class MapView(QGraphicsView):
133
136
  self.diagram_w = 25000
134
137
  self.diagram_H = 25000
135
138
 
136
- self.inItem = False
139
+ # self.in_item = False # looks that it is written but never used
137
140
  self.pressed = False
138
- self.disableMove = False
141
+ self.disable_move = False
139
142
 
140
143
  # updated later
141
144
  self.view_width = self.width()
@@ -147,6 +150,14 @@ class MapView(QGraphicsView):
147
150
 
148
151
  self.scale(initial_zoom_factor, initial_zoom_factor)
149
152
 
153
+ def set_notice(self, val: str):
154
+ """
155
+
156
+ :param val:
157
+ :return:
158
+ """
159
+ self.attribution_label.setText(val)
160
+
150
161
  def selected_items(self) -> List[QGraphicsItem]:
151
162
  """
152
163
  Get the selected items
@@ -162,7 +173,7 @@ class MapView(QGraphicsView):
162
173
  """
163
174
  self.map_widget.mousePressEvent(event)
164
175
  self.pressed = True
165
- self.disableMove = False
176
+ self.disable_move = False
166
177
 
167
178
  super().mousePressEvent(event)
168
179
 
@@ -174,7 +185,7 @@ class MapView(QGraphicsView):
174
185
  """
175
186
  self.map_widget.mouseReleaseEvent(event)
176
187
  self.pressed = False
177
- self.disableMove = True
188
+ self.disable_move = True
178
189
  super().mouseReleaseEvent(event)
179
190
 
180
191
  def mouseDoubleClickEvent(self, event: QMouseEvent):
@@ -192,11 +203,12 @@ class MapView(QGraphicsView):
192
203
  :param event:
193
204
  :return:
194
205
  """
195
- if not self.disableMove:
206
+ if not self.disable_move:
196
207
  self.map_widget.mouseMoveEvent(event)
197
- self.centerSchema()
208
+ self.center_schema()
198
209
 
199
210
  super().mouseMoveEvent(event)
211
+ self.update_label_position()
200
212
 
201
213
  def keyPressEvent(self, event: QKeyEvent):
202
214
  """
@@ -247,7 +259,8 @@ class MapView(QGraphicsView):
247
259
 
248
260
  self.map_widget.wheelEvent(event)
249
261
 
250
- self.centerSchema()
262
+ self.center_schema()
263
+ self.update_label_position()
251
264
 
252
265
  def dragEnterEvent(self, event: QDragEnterEvent):
253
266
  """
@@ -280,21 +293,29 @@ class MapView(QGraphicsView):
280
293
  Widget resized, recompute some state.
281
294
  """
282
295
 
296
+ super().resizeEvent(event)
283
297
  self.map_widget.resizeEvent(event=event)
284
298
 
285
- self.proxy_widget.setPos(0, self._scene.sceneRect().height() - self.label.height()) # Bottom-left position
299
+ def update_label_position(self):
300
+ """
301
+ Updates the position of the label to the bottom-left corner of the viewport.
302
+ """
303
+ view_width = self.viewport().width()
304
+ view_height = self.viewport().height()
286
305
 
287
- def setSizeDiagram(self) -> None:
306
+ # Set position relative to the bottom-left corner of the viewport
307
+ self.label_proxy_widget.setPos(self.mapToScene(0, view_height - self.attribution_label.height()))
308
+
309
+ def set_size_diagram(self) -> None:
288
310
  """
289
311
 
290
312
  :return:
291
313
  """
292
314
  # new widget size
293
- # TODO: These vars must be declared in init
294
315
  self.view_width = self.width()
295
316
  self.view_height = self.height()
296
317
 
297
- def setSceneRectDiagram(self) -> None:
318
+ def set_scene_rect_diagram(self) -> None:
298
319
  """
299
320
 
300
321
  :return:
@@ -306,12 +327,9 @@ class MapView(QGraphicsView):
306
327
  yToDiagram = -(used_height / 2)
307
328
 
308
329
  # Adjust the scene rect if needed
309
- self.setSceneRect(xToDiagram,
310
- yToDiagram,
311
- used_width,
312
- used_height)
330
+ self.setSceneRect(xToDiagram, yToDiagram, used_width, used_height)
313
331
 
314
- self.centerSchema()
332
+ self.center_schema()
315
333
 
316
334
  def to_lat_lon(self, x: float, y: float) -> Tuple[float, float]:
317
335
  """
@@ -347,7 +365,7 @@ class MapView(QGraphicsView):
347
365
 
348
366
  return x, y
349
367
 
350
- def centerSchema(self) -> None:
368
+ def center_schema(self) -> None:
351
369
  """
352
370
  This function centers the schema relative to the map according to lat. and long.
353
371
  """
@@ -364,142 +382,6 @@ class MapView(QGraphicsView):
364
382
  self.map_widget.view.centerOn(point)
365
383
 
366
384
 
367
- class NoticeWidget(QWidget):
368
- """
369
- MapView
370
- """
371
-
372
- def __init__(self, map_widget: "MapWidget"):
373
- """
374
-
375
- :param map_widget:
376
- """
377
- QWidget.__init__(self)
378
-
379
- # Enable drop functionality
380
- self.setAcceptDrops(True)
381
-
382
- self.map_widget = map_widget
383
-
384
- # add a label to display copyright stuff
385
- self.notice_label = QLabel("some notice")
386
- self.notice_label.setAlignment(Qt.AlignLeft | Qt.AlignBottom)
387
- self.notice_label.setStyleSheet("background-color: rgba(255, 255, 255, 0);"
388
- "font-size: 8pt;"
389
- "color: rgba(100, 100, 100, 255);")
390
-
391
- # Create a container for the label and position it at the bottom-left
392
- self.label_container = QWidget()
393
- self.label_layout = QVBoxLayout(self.label_container)
394
- self.label_layout.addWidget(self.notice_label)
395
- self.label_layout.setAlignment(Qt.AlignLeft | Qt.AlignBottom)
396
- self.label_layout.setContentsMargins(1, 1, 1, 1) # Optional margin
397
-
398
- self.setLayout(self.label_layout)
399
-
400
- def set_notice(self, val: str) -> None:
401
- """
402
- Set the notification text
403
- :param val: some text
404
- """
405
- self.notice_label.setText(val)
406
-
407
- def mousePressEvent(self, event: QMouseEvent):
408
- """
409
-
410
- :param event:
411
- :return:
412
- """
413
- self.map_widget.view.mousePressEvent(event)
414
- super().mousePressEvent(event)
415
-
416
- def mouseReleaseEvent(self, event: QMouseEvent):
417
- """
418
-
419
- :param event:
420
- :return:
421
- """
422
- self.map_widget.view.mouseReleaseEvent(event)
423
- super().mouseReleaseEvent(event)
424
-
425
- def mouseDoubleClickEvent(self, event: QMouseEvent):
426
- """
427
-
428
- :param event:
429
- :return:
430
- """
431
- self.map_widget.view.mouseDoubleClickEvent(event)
432
- super().mouseDoubleClickEvent(event)
433
-
434
- def mouseMoveEvent(self, event: QMouseEvent):
435
- """
436
-
437
- :param event:
438
- :return:
439
- """
440
- self.map_widget.view.mouseMoveEvent(event)
441
- super().mouseMoveEvent(event)
442
-
443
- def keyPressEvent(self, event: QKeyEvent):
444
- """
445
-
446
- :param event:
447
- :return:
448
- """
449
- self.map_widget.view.keyPressEvent(event)
450
-
451
- def keyReleaseEvent(self, event: QKeyEvent):
452
- """
453
-
454
- :param event:
455
- :return:
456
- """
457
- self.map_widget.view.keyReleaseEvent(event)
458
-
459
- def wheelEvent(self, event: QWheelEvent):
460
- """
461
-
462
- :param event:
463
- :return:
464
- """
465
- super().wheelEvent(event)
466
- self.map_widget.view.wheelEvent(event)
467
-
468
- def dragEnterEvent(self, event: QDragEnterEvent):
469
- """
470
-
471
- :param event:
472
- :return:
473
- """
474
- if event.mimeData().hasFormat('component/name'):
475
- event.accept()
476
-
477
- def dragMoveEvent(self, event: QDragMoveEvent):
478
- """
479
-
480
- :param event:
481
- :return:
482
- """
483
- super().dragMoveEvent(event)
484
- self.map_widget.view.dragMoveEvent(event)
485
-
486
- def dropEvent(self, event: QDropEvent):
487
- """
488
-
489
- :param event:
490
- :return:
491
- """
492
- super().dropEvent(event)
493
- self.map_widget.view.dropEvent(event)
494
-
495
- def resizeEvent(self, event: QResizeEvent = None):
496
- """
497
- Widget resized, recompute some state.
498
- """
499
- super().resizeEvent(event)
500
- self.map_widget.view.resizeEvent(event=event)
501
-
502
-
503
385
  class MapWidget(QWidget):
504
386
  """
505
387
  Map widget
@@ -541,16 +423,13 @@ class MapWidget(QWidget):
541
423
  self.view = MapView(scene=self.diagram_scene, map_widget=self)
542
424
  self.view.setBackgroundBrush(Qt.transparent)
543
425
 
544
- # notification widget
545
- self.notice_widget = NoticeWidget(map_widget=self)
546
-
547
426
  # -------------------------------------------------------------------------
548
427
  # Internal vars
549
428
  # -------------------------------------------------------------------------
550
429
  # remember the tile source object
551
430
  self._tile_src: Tiles = tile_src
552
431
  self._tile_src.setCallback(self.on_tile_available)
553
- self.notice_widget.set_notice(val=self._tile_src.attribution_string)
432
+ self.view.set_notice(val=self._tile_src.attribution_string)
554
433
 
555
434
  # the tile coordinates
556
435
  self.level: int = start_level
@@ -635,11 +514,11 @@ class MapWidget(QWidget):
635
514
  if tile_src.TilesetName != self._tile_src.TilesetName: # avoid changing tilesets to themselves
636
515
  self._tile_src: Tiles = tile_src
637
516
  self._tile_src.setCallback(self.on_tile_available)
638
- self.notice_widget.set_notice(val=self._tile_src.attribution_string)
517
+ self.view.set_notice(val=self._tile_src.attribution_string)
639
518
 
640
519
  if self.GotoLevel(level):
641
520
  self.GotoLevelAndPosition(level=level, longitude=longitude, latitude=latitude)
642
- self.view.centerSchema()
521
+ self.view.center_schema()
643
522
  else:
644
523
  while abs(self.view.schema_zoom - 0.015625) > 0.00001:
645
524
  self.view.schema_zoom = self.view.schema_zoom / self.view.map_widget.zoom_factor
@@ -928,14 +807,13 @@ class MapWidget(QWidget):
928
807
  Widget resized, recompute some state.
929
808
  """
930
809
  if updateDiagram:
931
- self.view.setSizeDiagram()
810
+ self.view.set_size_diagram()
932
811
 
933
812
  # recalculate the "key" tile stuff
934
813
  self.rectify_key_tile()
935
814
 
936
815
  if updateDiagram:
937
- self.view.setSceneRectDiagram()
938
-
816
+ self.view.set_scene_rect_diagram()
939
817
 
940
818
  def enterEvent(self, event: QEnterEvent):
941
819
  """
@@ -2000,15 +1878,6 @@ class MapWidget(QWidget):
2000
1878
  # self.tile_size_y = tile_src.tile_size_y
2001
1879
  self.level = level
2002
1880
 
2003
- result = self.tile_src.GetInfo(level)
2004
- (num_tiles_x, num_tiles_y, ppd_x, ppd_y) = result
2005
- # self.map_width = self.tile_size_x * num_tiles_x
2006
- # self.map_height = self.tile_size_y * num_tiles_y
2007
-
2008
- # set tile levels stuff - allowed levels, etc
2009
- # self.tiles_max_level = max(tile_src.levels)
2010
- # self.tiles_min_level = min(tile_src.levels)
2011
-
2012
1881
  # set callback from Tile source object when tile(s) available
2013
1882
  self.tile_src.setCallback(self.on_tile_available)
2014
1883
 
@@ -40,7 +40,7 @@ from GridCalEngine.Devices.Diagrams.schematic_diagram import SchematicDiagram
40
40
  from GridCalEngine.Devices.Diagrams.map_diagram import MapDiagram
41
41
  from GridCalEngine.Simulations.types import DRIVER_OBJECTS
42
42
  from GridCalEngine.basic_structures import Logger
43
- from GridCalEngine.enumerations import DeviceType, SimulationTypes
43
+ from GridCalEngine.enumerations import SimulationTypes
44
44
 
45
45
  from GridCal.Gui.Diagrams.graphics_manager import GraphicsManager
46
46
  import GridCalEngine.Devices.Diagrams.palettes as palettes