GridCal 5.3.20__tar.gz → 5.3.22__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.3.20 → gridcal-5.3.22}/GridCal/Gui/Analysis/AnalysisDialogue.py +1 -1
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +14 -2
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +1 -1
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +84 -108
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +16 -6
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +27 -11
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +28 -28
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/base_diagram_widget.py +5 -11
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/MainWindow.py +307 -217
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +102 -42
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Model/objects.py +1 -4
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Model/time_events.py +21 -35
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Server/server.py +18 -5
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +1 -2
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/base_gui.py +37 -1
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/io.py +7 -7
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/simulations.py +46 -44
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/icons_rc.py +1 -1
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/icons_rc.py +450 -26
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/profile_dialogue.py +256 -128
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +69 -115
- gridcal-5.3.22/GridCal/Gui/toast_widget.py +184 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Session/server_driver.py +24 -31
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/__version__.py +1 -1
- {gridcal-5.3.20 → gridcal-5.3.22}/PKG-INFO +1 -1
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ExecuteGridCal.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Analysis/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Analysis/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/demo_code.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/object_select_window.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Visualization/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Visualization/visualization.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Widgets/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/associations_model.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/general_dialogues.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/gui_functions.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/messages.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/object_model.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/pandas_model.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/plot_config.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/profiles_model.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/python_console.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/python_highlighter.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/results_model.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/themes.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/update_gui_all.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/update_gui_common.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/wrappable_table_model.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/LICENSE.txt +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Session/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Session/export_results_driver.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Session/file_handler.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Session/session.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Session/synchronization_driver.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/data/GridCal.ico +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/data/GridCal.svg +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/data/__init__.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/data/cables.csv +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/data/sequence_lines.csv +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/data/transformers.csv +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/data/wires.csv +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/plugins.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/templates.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/GridCal/update.py +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/setup.cfg +0 -0
- {gridcal-5.3.20 → gridcal-5.3.22}/setup.py +0 -0
@@ -79,7 +79,7 @@ class GridAnalysisGUI(QtWidgets.QMainWindow):
|
|
79
79
|
fixable_err.fix(logger=logger,
|
80
80
|
fix_ts=self.ui.fixTimeSeriesCheckBox.isChecked())
|
81
81
|
|
82
|
-
if
|
82
|
+
if logger.has_logs():
|
83
83
|
dlg = LogsDialogue("Fixed issues", logger)
|
84
84
|
dlg.setModal(True)
|
85
85
|
dlg.exec()
|
@@ -101,20 +101,32 @@ class CoordinatesInputAssociations(QtCore.QAbstractTableModel):
|
|
101
101
|
|
102
102
|
self.__headers = ['Name', 'Code', 'x', 'y', 'latitude', 'longitude']
|
103
103
|
|
104
|
+
def update(self):
|
105
|
+
"""
|
106
|
+
update table
|
107
|
+
"""
|
108
|
+
self.layoutAboutToBeChanged.emit()
|
109
|
+
self.layoutChanged.emit()
|
110
|
+
|
104
111
|
def append(self, val: CoordinatesInputAssociation):
|
105
112
|
self.__values.append(val)
|
113
|
+
self.update()
|
106
114
|
|
107
115
|
def set_x_at(self, idx, value):
|
108
116
|
self.__values[idx].x = value
|
117
|
+
self.update()
|
109
118
|
|
110
119
|
def set_y_at(self, idx, value):
|
111
120
|
self.__values[idx].y = value
|
121
|
+
self.update()
|
112
122
|
|
113
123
|
def set_latitude_at(self, idx, value):
|
114
124
|
self.__values[idx].latitude = value
|
125
|
+
self.update()
|
115
126
|
|
116
127
|
def set_longitude_at(self, idx, value):
|
117
128
|
self.__values[idx].longitude = value
|
129
|
+
self.update()
|
118
130
|
|
119
131
|
def get_name_at(self, idx):
|
120
132
|
return self.__values[idx].name
|
@@ -139,6 +151,7 @@ class CoordinatesInputAssociations(QtCore.QAbstractTableModel):
|
|
139
151
|
self.__values[idx].y = 0
|
140
152
|
self.__values[idx].latitude = 0
|
141
153
|
self.__values[idx].longitude = 0
|
154
|
+
self.update()
|
142
155
|
|
143
156
|
def rowCount(self, parent=None):
|
144
157
|
return len(self.__values)
|
@@ -149,7 +162,6 @@ class CoordinatesInputAssociations(QtCore.QAbstractTableModel):
|
|
149
162
|
def data(self, index, role=QtCore.Qt.ItemDataRole.DisplayRole):
|
150
163
|
if index.isValid():
|
151
164
|
if role == QtCore.Qt.ItemDataRole.DisplayRole:
|
152
|
-
# return self.formatter(self._data[index.row(), index.column()])
|
153
165
|
return str(self.__values[index.row()].get_at(index.column()))
|
154
166
|
return None
|
155
167
|
|
@@ -394,7 +406,7 @@ class CoordinatesInputGUI(QtWidgets.QDialog):
|
|
394
406
|
for hdr in duplicate_hdr:
|
395
407
|
logger.add_error("Duplicated header", device=hdr)
|
396
408
|
|
397
|
-
logs_dialogue = LogsDialogue(name="
|
409
|
+
logs_dialogue = LogsDialogue(name="Duplicated headers", logger=logger, expand_all=True)
|
398
410
|
logs_dialogue.exec()
|
399
411
|
|
400
412
|
# filter the headers
|
@@ -349,7 +349,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
349
349
|
function_ptr=self.remove_function_from_schematic_and_db)
|
350
350
|
|
351
351
|
add_menu_entry(menu=menu,
|
352
|
-
text="
|
352
|
+
text="Substation diagram",
|
353
353
|
icon_path=":/Icons/icons/grid_icon.svg",
|
354
354
|
function_ptr=self.new_substation_diagram)
|
355
355
|
|
@@ -20,7 +20,7 @@ from PySide6.QtGui import (QIcon, QPixmap, QImage, QStandardItemModel, QStandard
|
|
20
20
|
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
|
21
21
|
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_segment import MapLineSegment
|
22
22
|
from GridCal.Gui.SubstationDesigner.substation_designer import SubstationDesigner
|
23
|
-
from GridCal.Gui.general_dialogues import CheckListDialogue
|
23
|
+
from GridCal.Gui.general_dialogues import CheckListDialogue
|
24
24
|
from GridCalEngine.Devices.Diagrams.map_location import MapLocation
|
25
25
|
from GridCalEngine.Devices.Substation import Bus
|
26
26
|
from GridCalEngine.Devices.Branches.line import Line, accept_line_connection
|
@@ -59,13 +59,13 @@ from GridCal.Gui.messages import error_msg, info_msg
|
|
59
59
|
|
60
60
|
if TYPE_CHECKING:
|
61
61
|
from GridCal.Gui.Main.SubClasses.Model.diagrams import DiagramsMain
|
62
|
+
from GridCal.Gui.Main.GridCalMain import GridCalMainGUI
|
62
63
|
|
63
64
|
MAP_BRANCH_GRAPHIC_TYPES = Union[
|
64
65
|
MapAcLine, MapDcLine, MapHvdcLine, MapFluidPathLine
|
65
66
|
]
|
66
67
|
|
67
68
|
|
68
|
-
|
69
69
|
def haversine_distance(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
|
70
70
|
"""
|
71
71
|
|
@@ -213,16 +213,14 @@ class GridMapWidget(BaseDiagramWidget):
|
|
213
213
|
"""
|
214
214
|
|
215
215
|
def __init__(self,
|
216
|
-
gui: DiagramsMain,
|
216
|
+
gui: GridCalMainGUI | DiagramsMain,
|
217
217
|
tile_src: Tiles,
|
218
218
|
start_level: int,
|
219
219
|
longitude: float,
|
220
220
|
latitude: float,
|
221
221
|
name: str,
|
222
222
|
circuit: MultiCircuit,
|
223
|
-
diagram: Union[None, MapDiagram] = None
|
224
|
-
call_delete_db_element_func: Callable[["GridMapWidget", ALL_DEV_TYPES], None] = None,
|
225
|
-
call_new_substation_diagram_func: Callable[[Substation], None] = None, ):
|
223
|
+
diagram: Union[None, MapDiagram] = None):
|
226
224
|
"""
|
227
225
|
GridMapWidget
|
228
226
|
:param tile_src: Tiles instance
|
@@ -232,8 +230,6 @@ class GridMapWidget(BaseDiagramWidget):
|
|
232
230
|
:param name: Name of the diagram
|
233
231
|
:param circuit: MultiCircuit instance
|
234
232
|
:param diagram: Diagram instance (optional)
|
235
|
-
:param call_delete_db_element_func: function pointer to call on delete (optional)
|
236
|
-
:param call_new_substation_diagram_func: function pointer to call on new_substation (optional)
|
237
233
|
"""
|
238
234
|
|
239
235
|
super().__init__(
|
@@ -246,7 +242,6 @@ class GridMapWidget(BaseDiagramWidget):
|
|
246
242
|
latitude=latitude) if diagram is None else diagram,
|
247
243
|
library_model=MapLibraryModel(),
|
248
244
|
time_index=None,
|
249
|
-
call_delete_db_element_func=call_delete_db_element_func
|
250
245
|
)
|
251
246
|
|
252
247
|
# declare the map
|
@@ -260,9 +255,6 @@ class GridMapWidget(BaseDiagramWidget):
|
|
260
255
|
# Any representation on the map must be done after this Goto Function
|
261
256
|
self.map.go_to_level_and_position(level=6, longitude=longitude, latitude=latitude)
|
262
257
|
|
263
|
-
# function pointer to call for a new substation diagram
|
264
|
-
self.call_new_substation_diagram_func = call_new_substation_diagram_func
|
265
|
-
|
266
258
|
# pool of runnable tasks that work best done asynch with a runnable
|
267
259
|
self.thread_pool = QThreadPool()
|
268
260
|
self.wheel_move_task: QRunnable | None = None
|
@@ -293,8 +285,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
293
285
|
self.remove_from_scene(graphic_object)
|
294
286
|
|
295
287
|
if propagate:
|
296
|
-
|
297
|
-
self.call_delete_db_element_func(self, device)
|
288
|
+
self.gui.call_delete_db_element(caller=self, api_obj=device)
|
298
289
|
|
299
290
|
@property
|
300
291
|
def name(self):
|
@@ -320,39 +311,37 @@ class GridMapWidget(BaseDiagramWidget):
|
|
320
311
|
"""
|
321
312
|
return [(elm.api_object, elm) for elm in self.map.diagram_scene.selectedItems()]
|
322
313
|
|
323
|
-
|
324
|
-
def get_selected_line_segments_tup(self) -> List[Tuple[Line, (MapAcLine,
|
314
|
+
def get_selected_line_segments_tup(self) -> List[Tuple[Line, (MapAcLine,
|
325
315
|
MapDcLine,
|
326
316
|
MapHvdcLine,
|
327
317
|
MapFluidPathLine)]]:
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
and isinstance(item.container,
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
318
|
+
"""
|
319
|
+
Get only selected line segments from the scene
|
320
|
+
|
321
|
+
:return: List of (Line, (MapAcLine, MapDcLine, MapHvdcLine, MapFluidPathLine)) tuples
|
322
|
+
"""
|
323
|
+
selected_line_segments = []
|
324
|
+
for item in self.map.diagram_scene.selectedItems():
|
325
|
+
if (hasattr(item, 'api_object') and hasattr(item, 'container')
|
326
|
+
and isinstance(item.container,
|
327
|
+
(MapAcLine,
|
328
|
+
MapDcLine,
|
329
|
+
MapHvdcLine,
|
330
|
+
MapFluidPathLine))):
|
331
|
+
selected_line_segments.append((item.api_object, item.container))
|
332
|
+
return selected_line_segments
|
343
333
|
|
344
334
|
def get_selected_substations_tup(self) -> List[Tuple[Substation, SubstationGraphicItem]]:
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
:return: List of (Substation, SubstationGraphicItem) tuples
|
349
|
-
"""
|
350
|
-
selected_substations = []
|
351
|
-
for item in self.map.diagram_scene.selectedItems():
|
352
|
-
if hasattr(item, 'api_object') and isinstance(item, SubstationGraphicItem):
|
353
|
-
selected_substations.append((item.api_object, item))
|
354
|
-
return selected_substations
|
335
|
+
"""
|
336
|
+
Get only selected substations from the scene
|
355
337
|
|
338
|
+
:return: List of (Substation, SubstationGraphicItem) tuples
|
339
|
+
"""
|
340
|
+
selected_substations = []
|
341
|
+
for item in self.map.diagram_scene.selectedItems():
|
342
|
+
if hasattr(item, 'api_object') and isinstance(item, SubstationGraphicItem):
|
343
|
+
selected_substations.append((item.api_object, item))
|
344
|
+
return selected_substations
|
356
345
|
|
357
346
|
def add_to_scene(self, graphic_object: ALL_MAP_GRAPHICS = None) -> None:
|
358
347
|
"""
|
@@ -563,13 +552,10 @@ class GridMapWidget(BaseDiagramWidget):
|
|
563
552
|
delete_from_db: bool = False):
|
564
553
|
"""
|
565
554
|
|
566
|
-
|
567
555
|
:param api_object: Substation object from the MultiCircuit
|
568
556
|
:param substation_buses: List of buses associated to this substation
|
569
557
|
:param voltage_levels: List of voltage levels associated to this substation
|
570
558
|
:param delete_from_db: Does it remove the objects from the Database too (bool)
|
571
|
-
|
572
|
-
|
573
559
|
"""
|
574
560
|
|
575
561
|
# Remove from graphics manager and scene
|
@@ -591,19 +577,19 @@ class GridMapWidget(BaseDiagramWidget):
|
|
591
577
|
# Delete buses associated with this substation
|
592
578
|
for bus in substation_buses:
|
593
579
|
self.circuit.delete_bus(bus, delete_associated=True)
|
594
|
-
|
580
|
+
|
595
581
|
# Delete voltage levels associated with this substation
|
596
582
|
for vl in voltage_levels:
|
597
583
|
self.circuit.delete_voltage_level(vl)
|
598
|
-
|
584
|
+
|
599
585
|
# Delete the substation itself
|
600
586
|
self.circuit.delete_substation(obj=api_object)
|
601
587
|
|
602
|
-
def show_devices_to_disconnect_dialog(self,
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
588
|
+
def show_devices_to_disconnect_dialog(self,
|
589
|
+
devices: List[ALL_DEV_TYPES],
|
590
|
+
buses: List[Bus],
|
591
|
+
voltage_levels: List[VoltageLevel],
|
592
|
+
dialog_title: str):
|
607
593
|
"""
|
608
594
|
Show a dialog with the list of all devices that will be disconnected
|
609
595
|
|
@@ -614,38 +600,38 @@ class GridMapWidget(BaseDiagramWidget):
|
|
614
600
|
"""
|
615
601
|
from GridCal.Gui.general_dialogues import ElementsDialogue
|
616
602
|
from GridCalEngine.Devices.Parents.editable_device import GCProp
|
617
|
-
|
603
|
+
|
618
604
|
# Combine all devices
|
619
605
|
all_devices = devices + buses + voltage_levels
|
620
|
-
|
606
|
+
|
621
607
|
if not all_devices:
|
622
608
|
info_msg('No devices to disconnect', dialog_title)
|
623
609
|
return
|
624
|
-
|
610
|
+
|
625
611
|
# Create custom properties for name, type, and ID tag
|
626
|
-
name_prop = GCProp(prop_name='name', tpe=str, units='', definition='Device name',
|
627
|
-
display=True, editable=False)
|
628
|
-
|
629
|
-
type_prop = GCProp(prop_name='device_type', tpe=DeviceType, units='', definition='Device type',
|
612
|
+
name_prop = GCProp(prop_name='name', tpe=str, units='', definition='Device name',
|
630
613
|
display=True, editable=False)
|
631
|
-
|
632
|
-
|
614
|
+
|
615
|
+
type_prop = GCProp(prop_name='device_type', tpe=DeviceType, units='', definition='Device type',
|
633
616
|
display=True, editable=False)
|
634
|
-
|
617
|
+
|
618
|
+
idtag_prop = GCProp(prop_name='idtag', tpe=str, units='', definition='ID tag',
|
619
|
+
display=True, editable=False)
|
620
|
+
|
635
621
|
custom_props = [name_prop, type_prop, idtag_prop]
|
636
|
-
|
622
|
+
|
637
623
|
# Create and show the dialog
|
638
624
|
dialog = ElementsDialogue(name=dialog_title, elements=all_devices)
|
639
|
-
|
625
|
+
|
640
626
|
# Replace the model with our custom one that only shows name, type, and idtag
|
641
627
|
model = ObjectsModel(objects=all_devices,
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
628
|
+
time_index=None,
|
629
|
+
property_list=custom_props,
|
630
|
+
parent=dialog.objects_table,
|
631
|
+
editable=False)
|
632
|
+
|
647
633
|
dialog.objects_table.setModel(model)
|
648
|
-
|
634
|
+
|
649
635
|
# Make the dialog modal so the user must acknowledge it before continuing
|
650
636
|
dialog.setModal(True)
|
651
637
|
dialog.exec()
|
@@ -668,6 +654,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
668
654
|
|
669
655
|
for lineloc in lin.nodes_list:
|
670
656
|
self.map.diagram_scene.removeItem(lineloc)
|
657
|
+
|
671
658
|
def delete_Selected_from_widget(self, delete_from_db: bool) -> None:
|
672
659
|
"""
|
673
660
|
Delete the selected items from the diagram
|
@@ -1073,7 +1060,6 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1073
1060
|
for key, elm_graphics in graphics_dict.items():
|
1074
1061
|
elm_graphics.resize(new_radius=branch_width)
|
1075
1062
|
|
1076
|
-
|
1077
1063
|
# rescale substations (this is super-fast)
|
1078
1064
|
data: Dict[str, SubstationGraphicItem] = self.graphics_manager.get_device_type_dict(DeviceType.SubstationDevice)
|
1079
1065
|
for se_key, elm_graphics in data.items():
|
@@ -1192,20 +1178,19 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1192
1178
|
# voltage_cmap = viz.get_voltage_color_map()
|
1193
1179
|
loading_cmap = viz.get_loading_color_map()
|
1194
1180
|
|
1195
|
-
nbus = self.circuit.get_bus_number()
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
nodes_dict[bus.name] = (bus.latitude, bus.longitude)
|
1181
|
+
# nbus = self.circuit.get_bus_number()
|
1182
|
+
# longitudes = np.zeros(nbus)
|
1183
|
+
# latitudes = np.zeros(nbus)
|
1184
|
+
# nodes_dict = dict()
|
1185
|
+
# for i, bus in enumerate(self.circuit.buses):
|
1186
|
+
#
|
1187
|
+
# # try to find the diagram object of the DB object
|
1188
|
+
# graphic_object = self.graphics_manager.query(bus)
|
1189
|
+
#
|
1190
|
+
# if graphic_object:
|
1191
|
+
# longitudes[i] = bus.longitude
|
1192
|
+
# latitudes[i] = bus.latitude
|
1193
|
+
# nodes_dict[bus.name] = (bus.latitude, bus.longitude)
|
1209
1194
|
|
1210
1195
|
arrow_size = self.diagram.arrow_size # self.get_arrow_scale()
|
1211
1196
|
|
@@ -1256,12 +1241,11 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1256
1241
|
style = Qt.PenStyle.SolidLine
|
1257
1242
|
if use_flow_based_width:
|
1258
1243
|
weight = int(
|
1259
|
-
np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1)
|
1260
|
-
|
1261
|
-
weight =
|
1244
|
+
np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1)
|
1245
|
+
)
|
1246
|
+
graphic_object.set_width_scale(width=weight, arrow_width=arrow_size)
|
1262
1247
|
|
1263
1248
|
graphic_object.set_colour(color=color, style=style, tool_tip=tooltip)
|
1264
|
-
graphic_object.set_width_scale(width=weight, arrow_width=arrow_size)
|
1265
1249
|
|
1266
1250
|
if hasattr(graphic_object, 'set_arrows_with_power'):
|
1267
1251
|
graphic_object.set_arrows_with_power(
|
@@ -1319,8 +1303,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1319
1303
|
weight = int(
|
1320
1304
|
np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1)
|
1321
1305
|
)
|
1322
|
-
|
1323
|
-
weight = self.get_branch_width()
|
1306
|
+
graphic_object.set_width_scale(width=weight, arrow_width=arrow_size)
|
1324
1307
|
|
1325
1308
|
tooltip = str(i) + ': ' + graphic_object.api_object.name
|
1326
1309
|
tooltip += '\n' + loading_label + ': ' + "{:10.4f}".format(
|
@@ -1336,7 +1319,6 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1336
1319
|
graphic_object.set_arrows_with_hvdc_power(Pf=float(hvdc_Pf[i]), Pt=-hvdc_Pf[i])
|
1337
1320
|
|
1338
1321
|
graphic_object.set_colour(color=color, style=style, tool_tip=tooltip)
|
1339
|
-
graphic_object.set_width_scale(width=weight, arrow_width=arrow_size)
|
1340
1322
|
|
1341
1323
|
if fluid_path_flow is not None:
|
1342
1324
|
|
@@ -1377,10 +1359,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1377
1359
|
:param substation:
|
1378
1360
|
:return:
|
1379
1361
|
"""
|
1380
|
-
|
1381
|
-
self.call_new_substation_diagram_func(substation)
|
1382
|
-
else:
|
1383
|
-
print("call_new_substation_diagram_func is None :( ")
|
1362
|
+
self.gui.new_bus_branch_diagram_from_substation([substation])
|
1384
1363
|
|
1385
1364
|
def copy(self) -> "GridMapWidget":
|
1386
1365
|
"""
|
@@ -1402,8 +1381,6 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1402
1381
|
name=self.diagram.name,
|
1403
1382
|
circuit=self.circuit,
|
1404
1383
|
diagram=self.diagram,
|
1405
|
-
call_new_substation_diagram_func=self.call_new_substation_diagram_func,
|
1406
|
-
call_delete_db_element_func=self.call_delete_db_element_func
|
1407
1384
|
)
|
1408
1385
|
|
1409
1386
|
def consolidate_coordinates(self):
|
@@ -1416,12 +1393,10 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1416
1393
|
device_type=DeviceType.LineLocation)
|
1417
1394
|
|
1418
1395
|
for gelm in graphics_substations:
|
1419
|
-
|
1420
1396
|
gelm.api_object.latitude = gelm.lat
|
1421
1397
|
gelm.api_object.longitude = gelm.lon
|
1422
1398
|
|
1423
1399
|
for gelm in graphics_linelocations:
|
1424
|
-
|
1425
1400
|
gelm.api_object.lat = gelm.lat
|
1426
1401
|
gelm.api_object.long = gelm.lon
|
1427
1402
|
|
@@ -1546,7 +1521,8 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1546
1521
|
msg = QMessageBox()
|
1547
1522
|
msg.setIcon(QMessageBox.Icon.Warning)
|
1548
1523
|
msg.setText(f"No suitable voltage level ({vnom:.2f} kV) found in substation \"{substation_api.name}\".")
|
1549
|
-
msg.setInformativeText(
|
1524
|
+
msg.setInformativeText(
|
1525
|
+
"The line cannot be connected. Please ensure the target substation has a bus with a matching nominal voltage.")
|
1550
1526
|
msg.setWindowTitle("Connection Error")
|
1551
1527
|
msg.exec()
|
1552
1528
|
return
|
@@ -1694,7 +1670,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1694
1670
|
|
1695
1671
|
# Preserve waypoints for line 1 (from start to insertion point)
|
1696
1672
|
# Add all waypoints from the original line up to the closest segment
|
1697
|
-
for i in range(1, closest_segment_idx + 1):
|
1673
|
+
for i in range(1, closest_segment_idx + 1):
|
1698
1674
|
line1.locations.add_location(lat=waypoints[i][0], long=waypoints[i][1], alt=0.0)
|
1699
1675
|
|
1700
1676
|
# --- Assign offset waypoints ---
|
@@ -1727,8 +1703,9 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1727
1703
|
line1.update_length()
|
1728
1704
|
line2.update_length()
|
1729
1705
|
|
1730
|
-
self.
|
1731
|
-
|
1706
|
+
self.gui.show_info_toast(
|
1707
|
+
f'{line1.name} ({line1.length:.3f}km) and {line2.name} ({line2.length:.3f}km) created. {line_api.name} removed.'
|
1708
|
+
)
|
1732
1709
|
|
1733
1710
|
def _closest_point_on_segment(self, lat1, lon1, lat2, lon2, lat3, lon3):
|
1734
1711
|
"""
|
@@ -1928,9 +1905,9 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1928
1905
|
if suitable_bus_in_selected is None:
|
1929
1906
|
# Find or create a voltage level with the appropriate voltage in the selected substation
|
1930
1907
|
voltage_level_in_selected = None
|
1931
|
-
for
|
1932
|
-
if abs(
|
1933
|
-
voltage_level_in_selected =
|
1908
|
+
for vl_graphic in substation_graphic.voltage_level_graphics:
|
1909
|
+
if abs(vl_graphic.api_object.Vnom - vnom) < 0.01:
|
1910
|
+
voltage_level_in_selected = vl_graphic.api_object
|
1934
1911
|
break
|
1935
1912
|
|
1936
1913
|
if voltage_level_in_selected is None:
|
@@ -2212,7 +2189,6 @@ class GridMapWidget(BaseDiagramWidget):
|
|
2212
2189
|
bus_to = line_api.bus_to
|
2213
2190
|
bus_to_idtag_0 = bus_to.idtag
|
2214
2191
|
|
2215
|
-
|
2216
2192
|
buses1 = self.circuit.get_substation_buses(substation=substation_api_1)
|
2217
2193
|
buses2 = self.circuit.get_substation_buses(substation=substation_api_2)
|
2218
2194
|
|
@@ -2285,7 +2261,6 @@ class GridMapWidget(BaseDiagramWidget):
|
|
2285
2261
|
msg.exec()
|
2286
2262
|
return
|
2287
2263
|
|
2288
|
-
|
2289
2264
|
# Remove past graphic item and add the new one
|
2290
2265
|
|
2291
2266
|
self.remove_branch_graphic(line=line_graphic, delete_from_db=False)
|
@@ -2298,6 +2273,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
2298
2273
|
msg.setWindowTitle("Operation Successful")
|
2299
2274
|
msg.exec()
|
2300
2275
|
|
2276
|
+
|
2301
2277
|
def generate_map_diagram(
|
2302
2278
|
substations: List[Substation],
|
2303
2279
|
voltage_levels: List[VoltageLevel],
|
{gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py
RENAMED
@@ -10,6 +10,7 @@ from PySide6.QtCore import Qt
|
|
10
10
|
from PySide6.QtGui import QIcon, QPixmap
|
11
11
|
from PySide6.QtWidgets import QMenu, QLabel, QDoubleSpinBox, QPushButton, QVBoxLayout, QComboBox, QDialog
|
12
12
|
from GridCal.Gui.gui_functions import get_list_model, add_menu_entry
|
13
|
+
from GridCal.Gui.messages import warning_msg
|
13
14
|
from GridCal.Gui.Diagrams.SchematicWidget.terminal_item import BarTerminalItem, RoundTerminalItem
|
14
15
|
from GridCalEngine.Devices.Branches.line import SequenceLineType, OverheadLineType, UndergroundLineType
|
15
16
|
from GridCalEngine.Devices.Branches.dc_line import DcLine
|
@@ -86,8 +87,12 @@ class DcLineEditor(QDialog):
|
|
86
87
|
R = self.current_template.R
|
87
88
|
|
88
89
|
elif isinstance(self.current_template, OverheadLineType):
|
89
|
-
|
90
|
-
|
90
|
+
if self.current_template.check():
|
91
|
+
I = self.current_template.Imax[0]
|
92
|
+
R, X1, B1, I_kA = self.current_template.get_sequence_values(0, 1)
|
93
|
+
else:
|
94
|
+
warning_msg(text=f"The template {self.current_template.name} contains errors",
|
95
|
+
title="Load template")
|
91
96
|
|
92
97
|
except:
|
93
98
|
pass
|
@@ -198,12 +203,17 @@ class DcLineEditor(QDialog):
|
|
198
203
|
self.selected_template = template
|
199
204
|
|
200
205
|
elif isinstance(template, OverheadLineType):
|
201
|
-
|
206
|
+
if self.current_template.check():
|
207
|
+
R, X1, B1, I_kA = self.current_template.get_sequence_values(circuit_idx=0, seq=1)
|
208
|
+
self.i_spinner.setValue(I_kA)
|
209
|
+
self.r_spinner.setValue(R)
|
210
|
+
|
211
|
+
self.selected_template = template
|
212
|
+
else:
|
213
|
+
warning_msg(text=f"The template {self.current_template.name} contains errors",
|
214
|
+
title="Load template")
|
202
215
|
|
203
|
-
self.i_spinner.setValue(template.Imax[0])
|
204
|
-
self.r_spinner.setValue(R1)
|
205
216
|
|
206
|
-
self.selected_template = template
|
207
217
|
|
208
218
|
def load_template_btn_click(self):
|
209
219
|
"""
|
{gridcal-5.3.20 → gridcal-5.3.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py
RENAMED
@@ -7,6 +7,7 @@ from __future__ import annotations
|
|
7
7
|
import numpy as np
|
8
8
|
|
9
9
|
from typing import Union, List
|
10
|
+
from GridCal.Gui.messages import warning_msg
|
10
11
|
from PySide6.QtCore import Qt
|
11
12
|
from PySide6.QtWidgets import QPushButton, QVBoxLayout, QDialog, QLabel, QDoubleSpinBox, QComboBox, QCheckBox
|
12
13
|
from GridCal.Gui.gui_functions import get_list_model
|
@@ -105,12 +106,20 @@ class LineEditor(QDialog):
|
|
105
106
|
b_us = self.current_template.B
|
106
107
|
|
107
108
|
elif isinstance(self.current_template, OverheadLineType):
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
109
|
+
|
110
|
+
if self.current_template.check():
|
111
|
+
R1, X1, Bsh1, I_kA = self.current_template.get_sequence_values(
|
112
|
+
circuit_idx=self.line.circuit_idx,
|
113
|
+
seq=1
|
114
|
+
)
|
115
|
+
r_ohm = R1
|
116
|
+
x_ohm = X1
|
117
|
+
b_us = Bsh1
|
118
|
+
else:
|
119
|
+
warning_msg(text=f"The template {self.current_template.name} contains errors",
|
120
|
+
title="Load template")
|
121
|
+
|
122
|
+
|
114
123
|
|
115
124
|
except ValueError:
|
116
125
|
pass
|
@@ -257,11 +266,18 @@ class LineEditor(QDialog):
|
|
257
266
|
self.selected_template = template
|
258
267
|
|
259
268
|
elif isinstance(template, OverheadLineType):
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
269
|
+
if self.current_template.check():
|
270
|
+
R1, X1, Bsh1, I_kA = self.current_template.get_sequence_values(
|
271
|
+
circuit_idx=self.line.circuit_idx,
|
272
|
+
seq=1
|
273
|
+
)
|
274
|
+
self.i_spinner.setValue(I_kA)
|
275
|
+
self.r_spinner.setValue(R1)
|
276
|
+
self.x_spinner.setValue(X1)
|
277
|
+
self.b_spinner.setValue(Bsh1)
|
278
|
+
else:
|
279
|
+
warning_msg(text=f"The template {self.current_template.name} contains errors",
|
280
|
+
title="Load template")
|
265
281
|
|
266
282
|
self.selected_template = template
|
267
283
|
|