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.
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/object_plot_analysis.py +26 -2
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +3 -3
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +3 -3
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +10 -3
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +13 -8
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +4 -4
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +3 -3
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +49 -180
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/base_diagram_widget.py +1 -1
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/MainWindow.py +226 -230
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +50 -29
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/io.py +39 -22
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/simulations.py +8 -5
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/icons_rc.py +2 -2
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/__version__.py +1 -1
- {GridCal-5.1.34 → GridCal-5.1.36}/PKG-INFO +1 -1
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ExecuteGridCal.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/object_select_window.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/test_.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Visualization/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Visualization/visualization.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Widgets/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/associations_model.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/console_widget.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/general_dialogues.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/gui_functions.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/messages.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/object_model.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/pandas_model.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/plot_config.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/profiles_model.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/themes.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/update_gui_all.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/update_gui_common.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/wrappable_table_model.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/LICENSE.txt +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/export_results_driver.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/file_handler.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/results_model.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/server_driver.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/session.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Session/synchronization_driver.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/__init__.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/cables.csv +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/sequence_lines.csv +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/transformers.csv +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/data/wires.csv +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/plugins.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/templates.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/GridCal/update.py +0 -0
- {GridCal-5.1.34 → GridCal-5.1.36}/setup.cfg +0 -0
- {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
|
|
{GridCal-5.1.34 → GridCal-5.1.36}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py
RENAMED
@@ -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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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=
|
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
|
-
|
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
|
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.
|
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.
|
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
|
-
|
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(
|
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.
|
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
|
-
|
151
|
-
|
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
|
-
|
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
|
-
#
|
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,
|
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.
|
119
|
-
self.
|
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.
|
123
|
-
self.
|
124
|
-
|
125
|
-
self.
|
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.
|
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.
|
139
|
+
# self.in_item = False # looks that it is written but never used
|
137
140
|
self.pressed = False
|
138
|
-
self.
|
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.
|
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.
|
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.
|
206
|
+
if not self.disable_move:
|
196
207
|
self.map_widget.mouseMoveEvent(event)
|
197
|
-
self.
|
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.
|
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
|
-
|
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
|
-
|
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
|
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.
|
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
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
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
|