GridCal 5.3.21__tar.gz → 5.3.23__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.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +87 -28
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +12 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +9 -2
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/build_diff_tree.py +2 -2
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/MainWindow.py +6 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Server/server.py +5 -2
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -1
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/server_driver.py +21 -7
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/__version__.py +1 -1
- {gridcal-5.3.21 → gridcal-5.3.23}/PKG-INFO +1 -1
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ExecuteGridCal.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/demo_code.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/io.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/object_select_window.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Visualization/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Visualization/visualization.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Widgets/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/associations_model.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/general_dialogues.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/gui_functions.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/messages.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/object_model.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/pandas_model.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/plot_config.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/profiles_model.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/python_console.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/python_highlighter.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/results_model.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/themes.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/toast_widget.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/update_gui_all.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/update_gui_common.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/wrappable_table_model.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/LICENSE.txt +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/export_results_driver.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/file_handler.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/session.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Session/synchronization_driver.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/GridCal.ico +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/GridCal.svg +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/__init__.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/cables.csv +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/sequence_lines.csv +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/transformers.csv +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/data/wires.csv +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/plugins.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/templates.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/GridCal/update.py +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/setup.cfg +0 -0
- {gridcal-5.3.21 → gridcal-5.3.23}/setup.py +0 -0
@@ -6,7 +6,8 @@ from __future__ import annotations
|
|
6
6
|
import webbrowser
|
7
7
|
from typing import List, TYPE_CHECKING, Tuple
|
8
8
|
from PySide6 import QtWidgets
|
9
|
-
from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent, QGraphicsRectItem
|
9
|
+
from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent, QGraphicsRectItem, \
|
10
|
+
QMessageBox
|
10
11
|
from PySide6.QtCore import Qt, QPointF
|
11
12
|
from PySide6.QtGui import QBrush, QColor
|
12
13
|
from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
|
@@ -20,10 +21,11 @@ from GridCalEngine.Devices.Substation.bus import Bus
|
|
20
21
|
from GridCalEngine.Devices import VoltageLevel
|
21
22
|
from GridCalEngine.Devices.Substation.substation import Substation
|
22
23
|
from GridCalEngine.enumerations import DeviceType
|
24
|
+
from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
|
25
|
+
from GridCal.Gui.Diagrams.SchematicWidget import schematic_widget
|
23
26
|
|
24
27
|
if TYPE_CHECKING: # Only imports the below statements during type checking
|
25
28
|
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
26
|
-
from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
|
27
29
|
|
28
30
|
|
29
31
|
class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
@@ -108,7 +110,10 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
108
110
|
:param se: other SubstationGraphicItem
|
109
111
|
"""
|
110
112
|
self._callbacks += se._callbacks
|
111
|
-
|
113
|
+
for vl_graphic in se.voltage_level_graphics:
|
114
|
+
self.register_voltage_level(vl=vl_graphic.get_copy(new_parent=self))
|
115
|
+
|
116
|
+
self.sort_voltage_levels()
|
112
117
|
|
113
118
|
def set_size(self, r: float):
|
114
119
|
"""
|
@@ -237,6 +242,23 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
237
242
|
longitude=long,
|
238
243
|
graphic_object=self)
|
239
244
|
|
245
|
+
def refresh(self, pos: QPointF):
|
246
|
+
"""
|
247
|
+
This function refreshes the x, y coordinates of the graphic item
|
248
|
+
Returns:
|
249
|
+
|
250
|
+
"""
|
251
|
+
|
252
|
+
x = pos.x() - self.rect().width() / 2
|
253
|
+
y = pos.y() - self.rect().height() / 2
|
254
|
+
self.setRect(x, y, self.rect().width(), self.rect().height())
|
255
|
+
self.set_callbacks(pos.x(), pos.y())
|
256
|
+
|
257
|
+
for vl_graphics in self.voltage_level_graphics:
|
258
|
+
vl_graphics.center_on_substation()
|
259
|
+
|
260
|
+
self.update_position_at_the_diagram() # always update
|
261
|
+
|
240
262
|
def get_center_pos(self) -> QPointF:
|
241
263
|
"""
|
242
264
|
Get the center position
|
@@ -254,22 +276,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
254
276
|
if self.hovered:
|
255
277
|
# super().mouseMoveEvent(event)
|
256
278
|
pos = self.mapToParent(event.pos())
|
257
|
-
|
258
|
-
y = pos.y() - self.rect().height() / 2
|
259
|
-
self.setRect(x, y, self.rect().width(), self.rect().height())
|
260
|
-
self.set_callbacks(pos.x(), pos.y())
|
261
|
-
|
262
|
-
for vl_graphics in self.voltage_level_graphics:
|
263
|
-
vl_graphics.center_on_substation()
|
264
|
-
|
265
|
-
self.update_position_at_the_diagram() # always update
|
266
|
-
|
267
|
-
# QGraphicsRectItem.mouseMoveEvent(self, event)
|
268
|
-
# pos = self.mapToParent(event.pos())
|
269
|
-
# x = pos.x() + self.rect().width() / 2
|
270
|
-
# y = pos.y() + self.rect().height() / 2
|
271
|
-
# self.set_callbacks(x, y)
|
272
|
-
# self.update_position_at_the_diagram() # always update
|
279
|
+
self.refresh(pos=pos)
|
273
280
|
|
274
281
|
def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
|
275
282
|
"""
|
@@ -413,7 +420,8 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
413
420
|
"Remove substation from schematic")
|
414
421
|
|
415
422
|
if ok:
|
416
|
-
self.editor.remove_substation(
|
423
|
+
self.editor.remove_substation(api_object=self.api_object, delete_from_db=False, substation_buses=[],
|
424
|
+
voltage_levels=[])
|
417
425
|
|
418
426
|
def remove_function_from_schematic_and_db(self) -> None:
|
419
427
|
"""
|
@@ -514,8 +522,6 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
514
522
|
dialog.setModal(True)
|
515
523
|
dialog.exec()
|
516
524
|
|
517
|
-
|
518
|
-
|
519
525
|
def move_to_api_coordinates(self):
|
520
526
|
"""
|
521
527
|
Function to move the graphics to the Database location
|
@@ -544,7 +550,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
544
550
|
dlg.exec()
|
545
551
|
|
546
552
|
if dlg.is_accepted:
|
547
|
-
|
553
|
+
selected_buses = []
|
548
554
|
deleted_api_objs: List[Substation] = list()
|
549
555
|
|
550
556
|
# Collect all codes to merge
|
@@ -556,15 +562,18 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
556
562
|
if merged_codes == "":
|
557
563
|
merged_codes = se_graphics.api_object.code
|
558
564
|
else:
|
559
|
-
|
565
|
+
if se_graphics.api_object.code != "":
|
566
|
+
merged_codes = merged_codes + ',' + se_graphics.api_object.code
|
560
567
|
|
561
568
|
deleted_api_objs.append(se_graphics.api_object)
|
562
569
|
|
563
570
|
if se_graphics != self:
|
564
571
|
self.merge(se=se_graphics)
|
565
|
-
self.editor.
|
566
|
-
|
567
|
-
|
572
|
+
sub = self.editor.graphics_manager.delete_device(se_graphics.api_object)
|
573
|
+
self.editor.map.diagram_scene.removeItem(sub)
|
574
|
+
# self.editor.remove_substation(substation=se_graphics,
|
575
|
+
# delete_from_db=True,
|
576
|
+
# delete_connections=False)
|
568
577
|
|
569
578
|
# Update the code of the base substation
|
570
579
|
self.api_object.code = merged_codes # Needed?
|
@@ -578,11 +587,14 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
578
587
|
# re-index the stuff pointing at deleted api elements to this api object
|
579
588
|
for vl in self.editor.circuit.voltage_levels:
|
580
589
|
if vl.substation in deleted_api_objs:
|
590
|
+
print(f'{vl.substation.name} changed to {self.api_object.name} for {vl.name}')
|
581
591
|
vl.substation = self.api_object
|
582
592
|
|
583
593
|
for bus in self.editor.circuit.buses:
|
584
594
|
if bus.substation in deleted_api_objs:
|
595
|
+
print(f'{bus.substation.name} changed to {self.api_object.name} for {bus.name}')
|
585
596
|
bus.substation = self.api_object
|
597
|
+
selected_buses.append(bus)
|
586
598
|
|
587
599
|
# remove connections that are from and to the same substation
|
588
600
|
for tpe in [DeviceType.LineDevice, DeviceType.DCLineDevice, DeviceType.HVDCLineDevice]:
|
@@ -590,7 +602,54 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
590
602
|
if elm.api_object.get_substation_from() == elm.api_object.get_substation_to():
|
591
603
|
self.editor.remove_branch_graphic(elm, delete_from_db=True)
|
592
604
|
|
593
|
-
|
605
|
+
for substation in deleted_api_objs:
|
606
|
+
if substation == self.api_object:
|
607
|
+
pass
|
608
|
+
else:
|
609
|
+
self.editor.circuit.delete_substation(obj=substation)
|
610
|
+
|
611
|
+
self.refresh(pos=self.get_pos()) # always update
|
612
|
+
|
613
|
+
if len(selected_buses):
|
614
|
+
|
615
|
+
dlg = CheckListDialogue(
|
616
|
+
objects_list=[f'Create schematic diagram for the recipient substation {self.api_object.name}',
|
617
|
+
f'Unify buses and voltage levels with the same nominal voltage in recipient '
|
618
|
+
f'substation {self.api_object.name}'],
|
619
|
+
title=f"Finishing merging proces in substation{self.api_object.name}"
|
620
|
+
)
|
621
|
+
dlg.setModal(True)
|
622
|
+
dlg.exec()
|
623
|
+
|
624
|
+
|
625
|
+
if dlg.accepted:
|
626
|
+
for index in dlg.selected_indices:
|
627
|
+
if index == 0:
|
628
|
+
diagram = schematic_widget.make_diagram_from_buses(circuit=self.editor.circuit,
|
629
|
+
buses=selected_buses,
|
630
|
+
name=self.api_object.name + " diagram")
|
631
|
+
|
632
|
+
diagram_widget = schematic_widget.SchematicWidget(gui=self.editor.gui,
|
633
|
+
circuit=self.editor.circuit,
|
634
|
+
diagram=diagram,
|
635
|
+
default_bus_voltage=self.editor.gui.ui.defaultBusVoltageSpinBox.value(),
|
636
|
+
time_index=self.editor.gui.get_diagram_slider_index())
|
637
|
+
|
638
|
+
self.editor.gui.add_diagram_widget_and_diagram(diagram_widget=diagram_widget,
|
639
|
+
diagram=diagram)
|
640
|
+
self.editor.gui.set_diagrams_list_view()
|
641
|
+
self.editor.gui.set_diagram_widget(widget=diagram_widget)
|
642
|
+
elif index == 1:
|
643
|
+
pass
|
644
|
+
#TODO: Merge items
|
645
|
+
else:
|
646
|
+
self.editor.gui.show_info_toast(
|
647
|
+
message='Merge ended. There was no diagram produced. The buses and voltages were not unified.')
|
648
|
+
|
649
|
+
else:
|
650
|
+
self.editor.gui.show_info_toast(
|
651
|
+
message='The substation merged have no associated buses. No schematic can be produced.')
|
652
|
+
|
594
653
|
|
595
654
|
def new_substation_diagram(self):
|
596
655
|
"""
|
@@ -149,6 +149,18 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
149
149
|
longitude=long,
|
150
150
|
graphic_object=self)
|
151
151
|
|
152
|
+
def get_copy(self, new_parent: SubstationGraphicItem):
|
153
|
+
"""
|
154
|
+
Returns a copy of the VoltageLevelGraphicItem with a different parent
|
155
|
+
:param new_parent: New Substation Graphic item parent
|
156
|
+
:return: Copy of the VL Grpahic Item with new parent.
|
157
|
+
"""
|
158
|
+
return VoltageLevelGraphicItem(parent=new_parent, editor=new_parent.editor, api_object=self.api_object,
|
159
|
+
r=self.radius / self.api_object.Vnom / 0.01, draw_labels=self.draw_labels)
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
152
164
|
def mouseMoveEvent(self, event: QtWidgets.QGraphicsSceneMouseEvent) -> None:
|
153
165
|
"""
|
154
166
|
Event handler for mouse move events.
|
@@ -2482,7 +2482,8 @@ def get_devices_to_expand(circuit: MultiCircuit, substations: List[Substation],
|
|
2482
2482
|
|
2483
2483
|
if bus.voltage_level is not None:
|
2484
2484
|
voltage_levels.add(bus.voltage_level)
|
2485
|
-
|
2485
|
+
if bus.substation not in substations_extended:
|
2486
|
+
substations_extended.add(bus.substation)
|
2486
2487
|
|
2487
2488
|
if level < max_level:
|
2488
2489
|
|
@@ -2521,7 +2522,13 @@ def get_devices_to_expand(circuit: MultiCircuit, substations: List[Substation],
|
|
2521
2522
|
else:
|
2522
2523
|
raise Exception(f'Unrecognized branch type {obj.device_type.value}')
|
2523
2524
|
|
2524
|
-
|
2525
|
+
list_substations_extended = list(substations_extended)
|
2526
|
+
|
2527
|
+
for substation in substations:
|
2528
|
+
if substation not in list_substations_extended:
|
2529
|
+
list_substations_extended.append(substation)
|
2530
|
+
|
2531
|
+
return list_substations_extended, list(voltage_levels), lines, dc_lines, hvdc_lines
|
2525
2532
|
|
2526
2533
|
|
2527
2534
|
def make_diagram_from_substations(circuit: MultiCircuit,
|
@@ -95,8 +95,8 @@ def populate_tree(tree_widget, base: MultiCircuit, diff: MultiCircuit,
|
|
95
95
|
|
96
96
|
child_item = QtWidgets.QTreeWidgetItem(
|
97
97
|
parent_item,
|
98
|
-
[f"{elm.device_type.value}", "Mod", f"{elm.idtag}",
|
99
|
-
prop.name, str(base_val), str(new_val)]
|
98
|
+
[f"{diff_name}", f"{elm.device_type.value}", "Mod", f"{elm.idtag}",
|
99
|
+
f"{elm.name}", prop.name, str(base_val), str(new_val)]
|
100
100
|
)
|
101
101
|
child_item.setCheckState(0, Qt.CheckState.Unchecked)
|
102
102
|
|
@@ -4603,6 +4603,11 @@ class Ui_mainWindow(object):
|
|
4603
4603
|
|
4604
4604
|
self.horizontalLayout_8.addWidget(self.server_pwd_lineEdit)
|
4605
4605
|
|
4606
|
+
self.secureServerConnectionCheckBox = QCheckBox(self.frame_2)
|
4607
|
+
self.secureServerConnectionCheckBox.setObjectName(u"secureServerConnectionCheckBox")
|
4608
|
+
|
4609
|
+
self.horizontalLayout_8.addWidget(self.secureServerConnectionCheckBox)
|
4610
|
+
|
4606
4611
|
self.horizontalSpacer_7 = QSpacerItem(304, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
4607
4612
|
|
4608
4613
|
self.horizontalLayout_8.addItem(self.horizontalSpacer_7)
|
@@ -6030,6 +6035,7 @@ class Ui_mainWindow(object):
|
|
6030
6035
|
#if QT_CONFIG(tooltip)
|
6031
6036
|
self.server_pwd_lineEdit.setToolTip(QCoreApplication.translate("mainWindow", u"Type here the GridCal server password (ask your IT team)", None))
|
6032
6037
|
#endif // QT_CONFIG(tooltip)
|
6038
|
+
self.secureServerConnectionCheckBox.setText(QCoreApplication.translate("mainWindow", u"Secure", None))
|
6033
6039
|
self.server_status_label.setText(QCoreApplication.translate("mainWindow", u"...", None))
|
6034
6040
|
self.settings_tabWidget.setTabText(self.settings_tabWidget.indexOf(self.tab_5), QCoreApplication.translate("mainWindow", u"Server", None))
|
6035
6041
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.SettingsTab), QCoreApplication.translate("mainWindow", u"Settings", None))
|
@@ -26,7 +26,7 @@ class ServerMain(BaseMainGui):
|
|
26
26
|
BaseMainGui.__init__(self, parent=parent)
|
27
27
|
|
28
28
|
# Server driver
|
29
|
-
self.server_driver: ServerDriver = ServerDriver(url="", port=0, pwd="")
|
29
|
+
self.server_driver: ServerDriver = ServerDriver(url="", port=0, pwd="", secure=False)
|
30
30
|
self.server_driver.connected_signal.connect(self.server_connected)
|
31
31
|
self.server_driver.done_signal.connect(self.post_start_stop_server) # connect the post function
|
32
32
|
|
@@ -61,7 +61,8 @@ class ServerMain(BaseMainGui):
|
|
61
61
|
return {"url": self.ui.server_url_lineEdit.text(),
|
62
62
|
"port": self.ui.server_port_spinBox.value(),
|
63
63
|
"user": "",
|
64
|
-
"pwd": self.ui.server_pwd_lineEdit.text()
|
64
|
+
"pwd": self.ui.server_pwd_lineEdit.text(),
|
65
|
+
"secure": self.ui.secureServerConnectionCheckBox.isChecked(),}
|
65
66
|
|
66
67
|
def save_server_config(self):
|
67
68
|
"""
|
@@ -81,6 +82,7 @@ class ServerMain(BaseMainGui):
|
|
81
82
|
self.ui.server_port_spinBox.setValue(data.get("port", 8080))
|
82
83
|
# "user": "",
|
83
84
|
self.ui.server_pwd_lineEdit.setText(data.get("pwd", "1234"))
|
85
|
+
self.ui.secureServerConnectionCheckBox.setChecked(data.get("secure", True))
|
84
86
|
|
85
87
|
def load_server_config(self) -> None:
|
86
88
|
"""
|
@@ -107,6 +109,7 @@ class ServerMain(BaseMainGui):
|
|
107
109
|
self.server_driver.set_values(url=self.ui.server_url_lineEdit.text().strip(),
|
108
110
|
port=self.ui.server_port_spinBox.value(),
|
109
111
|
pwd=self.ui.server_pwd_lineEdit.text().strip(),
|
112
|
+
secure=self.ui.secureServerConnectionCheckBox.isChecked(),
|
110
113
|
status_func=self.ui.server_status_label.setText)
|
111
114
|
|
112
115
|
# save the last server config
|
@@ -147,7 +147,8 @@ class ServerDriver(QThread):
|
|
147
147
|
sync_event = Signal()
|
148
148
|
items_processed_event = Signal()
|
149
149
|
|
150
|
-
def __init__(self, url: str, port: int, pwd: str, sleep_time: int = 2, status_func: Callable[[str], None] = None
|
150
|
+
def __init__(self, url: str, port: int, pwd: str, sleep_time: int = 2, status_func: Callable[[str], None] = None,
|
151
|
+
secure: bool = False):
|
151
152
|
"""
|
152
153
|
Constructor
|
153
154
|
:param url: Server URL
|
@@ -163,6 +164,7 @@ class ServerDriver(QThread):
|
|
163
164
|
self.pwd = pwd
|
164
165
|
self.sleep_time = sleep_time
|
165
166
|
self.status_func: Callable[[str], None] = status_func
|
167
|
+
self.secure = secure
|
166
168
|
self.__running__ = False
|
167
169
|
|
168
170
|
self.logger = Logger()
|
@@ -175,19 +177,23 @@ class ServerDriver(QThread):
|
|
175
177
|
self.__cancel__ = False
|
176
178
|
self.__pause__ = False
|
177
179
|
|
178
|
-
def set_values(self, url: str, port: int, pwd: str, sleep_time: int = 2,
|
180
|
+
def set_values(self, url: str, port: int, pwd: str, sleep_time: int = 2,
|
181
|
+
secure: bool = False,
|
182
|
+
status_func: Callable[[str], None] = None):
|
179
183
|
"""
|
180
184
|
Set the values
|
181
185
|
:param url: Server URL
|
182
186
|
:param port: Server port
|
183
187
|
:param pwd: Server password
|
184
188
|
:param sleep_time: Sleep time (s)
|
189
|
+
:param secure: Use https?
|
185
190
|
:param status_func: a text function pointer
|
186
191
|
"""
|
187
192
|
self.url = url
|
188
193
|
self.port = port
|
189
194
|
self.pwd = pwd
|
190
195
|
self.sleep_time = sleep_time
|
196
|
+
self.secure = secure
|
191
197
|
self.status_func: Callable[[str], None] = status_func
|
192
198
|
self.__running__ = False
|
193
199
|
self.logger = Logger()
|
@@ -206,7 +212,10 @@ class ServerDriver(QThread):
|
|
206
212
|
Base URL of the service
|
207
213
|
:return:
|
208
214
|
"""
|
209
|
-
|
215
|
+
if self.secure:
|
216
|
+
return f"https://{self.url}:{self.port}"
|
217
|
+
else:
|
218
|
+
return f"http://{self.url}:{self.port}"
|
210
219
|
|
211
220
|
def get_certificate_path(self):
|
212
221
|
|
@@ -504,9 +513,15 @@ class RemoteJobDriver(QThread):
|
|
504
513
|
model_data = gather_model_as_jsons_for_communication(circuit=self.grid, instruction=self.instruction)
|
505
514
|
|
506
515
|
try:
|
507
|
-
response = send_json_data(json_data=model_data,
|
508
|
-
|
509
|
-
|
516
|
+
response, ok = send_json_data(json_data=model_data,
|
517
|
+
endpoint_url=websocket_url,
|
518
|
+
certificate=self.certificate_path)
|
519
|
+
|
520
|
+
if not ok:
|
521
|
+
response_text = response
|
522
|
+
self.logger.add_error("Response error", value=response_text)
|
523
|
+
response = None
|
524
|
+
|
510
525
|
except requests.exceptions.ConnectionError as e:
|
511
526
|
warn(str(e))
|
512
527
|
response = None
|
@@ -516,7 +531,6 @@ class RemoteJobDriver(QThread):
|
|
516
531
|
|
517
532
|
success = response.get("success", False)
|
518
533
|
|
519
|
-
|
520
534
|
if success:
|
521
535
|
results_data = response["results"]
|
522
536
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py
RENAMED
File without changes
|
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py
RENAMED
File without changes
|
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py
RENAMED
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py
RENAMED
File without changes
|
File without changes
|
{gridcal-5.3.21 → gridcal-5.3.23}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|