GridCal 5.3.19__tar.gz → 5.3.21__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.19 → gridcal-5.3.21}/GridCal/Gui/Analysis/AnalysisDialogue.py +1 -1
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +14 -2
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +16 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +20 -10
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +105 -14
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +282 -338
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +16 -6
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +27 -11
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +28 -28
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/base_diagram_widget.py +5 -11
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/grid_merge.py +48 -74
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/MainWindow.py +301 -217
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +132 -68
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/objects.py +2 -5
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/time_events.py +21 -35
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Server/server.py +13 -3
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +1 -1
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/base_gui.py +37 -1
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/io.py +7 -7
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/simulations.py +57 -55
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/icons_rc.py +1 -1
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/icons_rc.py +450 -26
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/profile_dialogue.py +297 -124
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +69 -115
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +5 -5
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/table_models.py +17 -20
- gridcal-5.3.21/GridCal/Gui/toast_widget.py +184 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Session/server_driver.py +3 -24
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/__version__.py +1 -1
- {gridcal-5.3.19 → gridcal-5.3.21}/PKG-INFO +1 -1
- gridcal-5.3.19/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -14
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ExecuteGridCal.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Analysis/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Analysis/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/demo_code.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/object_select_window.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Visualization/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Visualization/visualization.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Widgets/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/associations_model.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/general_dialogues.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/gui_functions.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/messages.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/object_model.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/pandas_model.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/plot_config.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/profiles_model.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/python_console.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/python_highlighter.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/results_model.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/themes.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/update_gui_all.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/update_gui_common.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/wrappable_table_model.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/LICENSE.txt +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Session/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Session/export_results_driver.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Session/file_handler.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Session/session.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Session/synchronization_driver.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/data/GridCal.ico +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/data/GridCal.svg +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/data/__init__.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/data/cables.csv +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/data/sequence_lines.csv +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/data/transformers.csv +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/data/wires.csv +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/plugins.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/templates.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/GridCal/update.py +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/setup.cfg +0 -0
- {gridcal-5.3.19 → gridcal-5.3.21}/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
|
@@ -135,6 +135,21 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
|
|
135
135
|
|
136
136
|
print()
|
137
137
|
|
138
|
+
def update_database_position(self) -> None:
|
139
|
+
"""
|
140
|
+
This function updates the position of this graphical element in the database
|
141
|
+
"""
|
142
|
+
real_position = self.pos()
|
143
|
+
center_point = self.get_pos()
|
144
|
+
|
145
|
+
self.lat, self.lon = self.editor.to_lat_lon(x=center_point.x() + real_position.x(),
|
146
|
+
y=center_point.y() + real_position.y())
|
147
|
+
|
148
|
+
# print(f'Updating node position id:{self.api_object.idtag}, lat:{self.lat}, lon:{self.lon}')
|
149
|
+
|
150
|
+
self.api_object.lat = self.lat
|
151
|
+
self.api_object.long = self.lon
|
152
|
+
|
138
153
|
def mouseMoveEvent(self, event: QtWidgets.QGraphicsSceneMouseEvent) -> None:
|
139
154
|
"""
|
140
155
|
Event handler for mouse move events.
|
@@ -166,6 +181,7 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
|
|
166
181
|
super().mouseReleaseEvent(event)
|
167
182
|
self.editor.disableMove = True
|
168
183
|
self.update_position_at_the_diagram()
|
184
|
+
# self.update_database_position()
|
169
185
|
|
170
186
|
def hoverEnterEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
|
171
187
|
"""
|
{gridcal-5.3.19 → gridcal-5.3.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py
RENAMED
@@ -258,23 +258,33 @@ class MapLineSegment(QGraphicsLineItem):
|
|
258
258
|
# Check if a substation is selected
|
259
259
|
selected_items = self.editor.get_selected()
|
260
260
|
has_substation = False
|
261
|
+
counter = 0
|
261
262
|
|
262
263
|
for api_obj, _ in selected_items:
|
263
264
|
if hasattr(api_obj, 'device_type') and api_obj.device_type == DeviceType.SubstationDevice:
|
264
265
|
has_substation = True
|
265
|
-
|
266
|
+
counter += 1
|
266
267
|
|
267
268
|
# Add the split line to substation option if a substation is selected
|
268
269
|
if has_substation:
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
270
|
+
if counter == 1:
|
271
|
+
add_menu_entry(menu=menu,
|
272
|
+
text="Split line to selected substation (In-Out)",
|
273
|
+
function_ptr=self.editor.split_line_to_substation,
|
274
|
+
icon_path=":/Icons/icons/divide.svg")
|
275
|
+
|
276
|
+
add_menu_entry(menu=menu,
|
277
|
+
text="Connect line to selected substation (T-joint)",
|
278
|
+
function_ptr=self.editor.create_t_joint_to_substation,
|
279
|
+
icon_path=":/Icons/icons/divide.svg")
|
280
|
+
elif counter == 2:
|
281
|
+
|
282
|
+
add_menu_entry(menu=menu,
|
283
|
+
text="Change substation connection of the line",
|
284
|
+
function_ptr=self.editor.change_line_connection,
|
285
|
+
icon_path=":/Icons/icons/divide.svg") # TODO: Think what icon can work well
|
286
|
+
else:
|
287
|
+
pass
|
278
288
|
|
279
289
|
add_menu_entry(menu=menu,
|
280
290
|
text="Plot profiles",
|
@@ -11,9 +11,11 @@ from PySide6.QtCore import Qt, QPointF
|
|
11
11
|
from PySide6.QtGui import QBrush, QColor
|
12
12
|
from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
|
13
13
|
from GridCal.Gui.gui_functions import add_menu_entry
|
14
|
-
from GridCal.Gui.messages import yes_no_question
|
14
|
+
from GridCal.Gui.messages import yes_no_question, info_msg
|
15
15
|
from GridCal.Gui.general_dialogues import InputNumberDialogue, CheckListDialogue
|
16
|
+
from GridCal.Gui.object_model import ObjectsModel
|
16
17
|
|
18
|
+
from GridCalEngine.Devices.types import ALL_DEV_TYPES
|
17
19
|
from GridCalEngine.Devices.Substation.bus import Bus
|
18
20
|
from GridCalEngine.Devices import VoltageLevel
|
19
21
|
from GridCalEngine.Devices.Substation.substation import Substation
|
@@ -347,7 +349,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
347
349
|
function_ptr=self.remove_function_from_schematic_and_db)
|
348
350
|
|
349
351
|
add_menu_entry(menu=menu,
|
350
|
-
text="
|
352
|
+
text="Substation diagram",
|
351
353
|
icon_path=":/Icons/icons/grid_icon.svg",
|
352
354
|
function_ptr=self.new_substation_diagram)
|
353
355
|
|
@@ -406,8 +408,9 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
406
408
|
"""
|
407
409
|
Removes the substation from the schematic only. The substation will remain in the database.
|
408
410
|
"""
|
409
|
-
ok = yes_no_question(
|
410
|
-
|
411
|
+
ok = yes_no_question(
|
412
|
+
f"Remove substation {self.api_object.name} from the schematic only? It will remain in the database.",
|
413
|
+
"Remove substation from schematic")
|
411
414
|
|
412
415
|
if ok:
|
413
416
|
self.editor.remove_substation(substation=self, delete_from_db=False)
|
@@ -417,11 +420,101 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
417
420
|
Removes the substation from both the schematic and the database. This action cannot be undone.
|
418
421
|
"""
|
419
422
|
|
420
|
-
|
421
|
-
|
423
|
+
# Store the API object before deleting the graphic
|
424
|
+
api_object = self.api_object
|
425
|
+
|
426
|
+
# Get all buses connected to this substation
|
427
|
+
substation_buses = [bus for bus in self.editor.circuit.buses if bus.substation == api_object]
|
428
|
+
|
429
|
+
# Get all voltage levels associated with this substation
|
430
|
+
voltage_levels = [vl for vl in self.editor.circuit.voltage_levels if vl.substation == api_object]
|
431
|
+
|
432
|
+
# voltage_levels = api_object.voltage_levels
|
433
|
+
|
434
|
+
delete_connections = True # TODO: This option was defaulted, no input was given from the GUI
|
435
|
+
|
436
|
+
devs = []
|
437
|
+
# find associated Branches in reverse order
|
438
|
+
for obj in substation_buses:
|
439
|
+
for branch_list in self.editor.circuit.get_branch_lists():
|
440
|
+
for i in range(len(branch_list) - 1, -1, -1):
|
441
|
+
if branch_list[i].bus_from == obj:
|
442
|
+
devs.append(branch_list[i])
|
443
|
+
elif branch_list[i].bus_to == obj:
|
444
|
+
devs.append(branch_list[i])
|
445
|
+
|
446
|
+
# find the associated injection devices
|
447
|
+
for inj_list in self.editor.circuit.get_injection_devices_lists():
|
448
|
+
for i in range(len(inj_list) - 1, -1, -1):
|
449
|
+
if inj_list[i].bus == obj:
|
450
|
+
devs.append(inj_list[i])
|
451
|
+
|
452
|
+
# Show all devices that will be disconnected
|
453
|
+
title = f"Devices to be {'deleted' if delete_connections else 'disconnected'} from {api_object.name}"
|
454
|
+
|
455
|
+
self.show_devices_to_disconnect_dialog(devices=devs, buses=substation_buses,
|
456
|
+
voltage_levels=voltage_levels, dialog_title=title)
|
457
|
+
|
458
|
+
ok = yes_no_question(
|
459
|
+
f"Remove substation {self.api_object.name} from both the schematic and the database? This action cannot be undone.",
|
460
|
+
"Remove substation from schematic and database")
|
422
461
|
|
423
462
|
if ok:
|
424
|
-
self.editor.remove_substation(
|
463
|
+
self.editor.remove_substation(api_object=api_object, substation_buses=substation_buses,
|
464
|
+
voltage_levels=voltage_levels, delete_from_db=True)
|
465
|
+
|
466
|
+
def show_devices_to_disconnect_dialog(self,
|
467
|
+
devices: List[ALL_DEV_TYPES],
|
468
|
+
buses: List[Bus],
|
469
|
+
voltage_levels: List[VoltageLevel],
|
470
|
+
dialog_title: str):
|
471
|
+
"""
|
472
|
+
Show a dialog with the list of all devices that will be disconnected
|
473
|
+
|
474
|
+
:param devices: List of devices to be disconnected
|
475
|
+
:param buses: List of buses associated with the substation
|
476
|
+
:param voltage_levels: List of voltage levels associated with the substation
|
477
|
+
:param dialog_title: Title for the dialog
|
478
|
+
"""
|
479
|
+
from GridCal.Gui.general_dialogues import ElementsDialogue
|
480
|
+
from GridCalEngine.Devices.Parents.editable_device import GCProp
|
481
|
+
|
482
|
+
# Combine all devices
|
483
|
+
all_devices = devices + buses + voltage_levels
|
484
|
+
|
485
|
+
if not all_devices:
|
486
|
+
info_msg('No devices to disconnect', dialog_title)
|
487
|
+
return
|
488
|
+
|
489
|
+
# Create custom properties for name, type, and ID tag
|
490
|
+
name_prop = GCProp(prop_name='name', tpe=str, units='', definition='Device name',
|
491
|
+
display=True, editable=False)
|
492
|
+
|
493
|
+
type_prop = GCProp(prop_name='device_type', tpe=DeviceType, units='', definition='Device type',
|
494
|
+
display=True, editable=False)
|
495
|
+
|
496
|
+
idtag_prop = GCProp(prop_name='idtag', tpe=str, units='', definition='ID tag',
|
497
|
+
display=True, editable=False)
|
498
|
+
|
499
|
+
custom_props = [name_prop, type_prop, idtag_prop]
|
500
|
+
|
501
|
+
# Create and show the dialog
|
502
|
+
dialog = ElementsDialogue(name=dialog_title, elements=all_devices)
|
503
|
+
|
504
|
+
# Replace the model with our custom one that only shows name, type, and idtag
|
505
|
+
model = ObjectsModel(objects=all_devices,
|
506
|
+
time_index=None,
|
507
|
+
property_list=custom_props,
|
508
|
+
parent=dialog.objects_table,
|
509
|
+
editable=False)
|
510
|
+
|
511
|
+
dialog.objects_table.setModel(model)
|
512
|
+
|
513
|
+
# Make the dialog modal so the user must acknowledge it before continuing
|
514
|
+
dialog.setModal(True)
|
515
|
+
dialog.exec()
|
516
|
+
|
517
|
+
|
425
518
|
|
426
519
|
def move_to_api_coordinates(self):
|
427
520
|
"""
|
@@ -453,10 +546,10 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
453
546
|
if dlg.is_accepted:
|
454
547
|
|
455
548
|
deleted_api_objs: List[Substation] = list()
|
456
|
-
|
549
|
+
|
457
550
|
# Collect all codes to merge
|
458
551
|
merged_codes = ""
|
459
|
-
|
552
|
+
|
460
553
|
for i in dlg.selected_indices:
|
461
554
|
|
462
555
|
se_graphics = selected[i]
|
@@ -464,7 +557,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
464
557
|
merged_codes = se_graphics.api_object.code
|
465
558
|
else:
|
466
559
|
merged_codes = merged_codes + ',' + se_graphics.api_object.code
|
467
|
-
|
560
|
+
|
468
561
|
deleted_api_objs.append(se_graphics.api_object)
|
469
562
|
|
470
563
|
if se_graphics != self:
|
@@ -472,10 +565,10 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
472
565
|
self.editor.remove_substation(substation=se_graphics,
|
473
566
|
delete_from_db=True,
|
474
567
|
delete_connections=False)
|
475
|
-
|
568
|
+
|
476
569
|
# Update the code of the base substation
|
477
570
|
self.api_object.code = merged_codes # Needed?
|
478
|
-
|
571
|
+
|
479
572
|
# Find the base substation in the circuit's collection and update it
|
480
573
|
for i, substation in enumerate(self.editor.circuit._substations):
|
481
574
|
if substation == self.api_object:
|
@@ -598,5 +691,3 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
598
691
|
# https://maps.google.com/?q=<lat>,<lng>
|
599
692
|
url = f"https://www.google.com/maps/?q={self.lat},{self.lon}"
|
600
693
|
webbrowser.open(url)
|
601
|
-
|
602
|
-
|