GridCal 5.1.19__tar.gz → 5.1.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.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +33 -94
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +14 -1
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +16 -39
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +45 -11
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +46 -9
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +16 -15
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +5 -2
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +4 -2
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +4 -1
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +81 -40
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +50 -44
- GridCal-5.1.21/GridCal/Gui/Diagrams/MapWidget/new_line_dialogue.py +125 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +15 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +8 -4
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +3 -5
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +9 -1
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +9 -1
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +10 -1
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +56 -51
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/base_diagram_widget.py +13 -27
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/diagrams_model.py +9 -8
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/GuiFunctions.py +0 -6
- GridCal-5.1.21/GridCal/Gui/LoadCatalogue/SelectComponents.py +134 -0
- GridCal-5.1.21/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +106 -0
- GridCal-5.1.21/GridCal/Gui/LoadCatalogue/icons_rc.py +324 -0
- GridCal-5.1.21/GridCal/Gui/LoadCatalogue/update_gui_file.py +9 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/MainWindow.py +1001 -1063
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +117 -66
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Model/objects.py +6 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Results/results.py +4 -1
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +8 -14
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/base_gui.py +23 -15
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/io.py +159 -68
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/simulations.py +2 -2
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/icons_rc.py +541 -254
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +1 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +2 -3
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/associations_model.py +19 -2
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/object_model.py +21 -1
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/pandas_model.py +20 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/profiles_model.py +21 -0
- GridCal-5.1.21/GridCal/Gui/table_view_header_wrap.py +84 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Session/file_handler.py +9 -2
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Session/results_model.py +20 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/__version__.py +1 -1
- GridCal-5.1.21/GridCal/data/__init__.py +0 -0
- GridCal-5.1.21/GridCal/templates.py +87 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/PKG-INFO +1 -1
- GridCal-5.1.19/GridCal/Gui/Diagrams/MapWidget/logger.py +0 -4
- GridCal-5.1.19/GridCal/Gui/Visualization/palettes.py +0 -464
- GridCal-5.1.19/GridCal/templates.py +0 -156
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ExecuteGridCal.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Analysis/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Analysis/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ConsoleWidget.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/GeneralDialogues.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/LoadDesigner → GridCal-5.1.21/GridCal/Gui/LoadCatalogue}/__init__.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/Main/SubClasses/Model → GridCal-5.1.21/GridCal/Gui/LoadDesigner}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/Main/SubClasses/Results → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Model}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {GridCal-5.1.19/GridCal/Gui/Main/SubClasses/Scripting → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Results}/__init__.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/Main/SubClasses/Server → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Scripting}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/Main/SubClasses/Settings → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Server}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/Main/SubClasses → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Settings}/__init__.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/Main → GridCal-5.1.21/GridCal/Gui/Main/SubClasses}/__init__.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/ProfilesInput → GridCal-5.1.21/GridCal/Gui/Main}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/object_select_window.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/RosetaExplorer → GridCal-5.1.21/GridCal/Gui/ProfilesInput}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/SigmaAnalysis → GridCal-5.1.21/GridCal/Gui/RosetaExplorer}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/SolarPowerWizard → GridCal-5.1.21/GridCal/Gui/SigmaAnalysis}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/SyncDialogue → GridCal-5.1.21/GridCal/Gui/SolarPowerWizard}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/SystemScaler → GridCal-5.1.21/GridCal/Gui/SyncDialogue}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/TowerBuilder → GridCal-5.1.21/GridCal/Gui/SystemScaler}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/TreeModelViewer → GridCal-5.1.21/GridCal/Gui/TowerBuilder}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/test_.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/Visualization → GridCal-5.1.21/GridCal/Gui/TreeModelViewer}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/Widgets → GridCal-5.1.21/GridCal/Gui/Visualization}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Visualization/visualization.py +0 -0
- {GridCal-5.1.19/GridCal/Gui/WindPowerWizard → GridCal-5.1.21/GridCal/Gui/Widgets}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {GridCal-5.1.19/GridCal/Gui → GridCal-5.1.21/GridCal/Gui/WindPowerWizard}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {GridCal-5.1.19/GridCal/Session → GridCal-5.1.21/GridCal/Gui}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/messages.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/plot_config.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/themes.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/update_gui_all.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/update_gui_common.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/LICENSE.txt +0 -0
- {GridCal-5.1.19/GridCal/ThirdParty → GridCal-5.1.21/GridCal/Session}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Session/export_results_driver.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Session/server_driver.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Session/session.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Session/synchronization_driver.py +0 -0
- {GridCal-5.1.19/GridCal/ThirdParty/qdarktheme/_icon → GridCal-5.1.21/GridCal/ThirdParty}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {GridCal-5.1.19/GridCal/ThirdParty/qdarktheme/_template → GridCal-5.1.21/GridCal/ThirdParty/qdarktheme/_icon}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {GridCal-5.1.19/GridCal/data → GridCal-5.1.21/GridCal/ThirdParty/qdarktheme/_template}/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/__init__.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/data/cables.csv +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/data/sequence_lines.csv +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/data/transformers.csv +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/data/wires.csv +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/GridCal/update.py +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/setup.cfg +0 -0
- {GridCal-5.1.19 → GridCal-5.1.21}/setup.py +0 -0
{GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py
RENAMED
@@ -15,6 +15,8 @@
|
|
15
15
|
# along with this program; if not, write to the Free Software Foundation,
|
16
16
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
17
17
|
from __future__ import annotations
|
18
|
+
|
19
|
+
# import uuid
|
18
20
|
from typing import TYPE_CHECKING, List, Union
|
19
21
|
|
20
22
|
import logging
|
@@ -28,6 +30,7 @@ from GridCalEngine.Devices.types import BRANCH_TYPES, FluidPath
|
|
28
30
|
from GridCalEngine.Devices.Branches.line import Line
|
29
31
|
from GridCalEngine.enumerations import DeviceType
|
30
32
|
from GridCal.Gui.Diagrams.generic_graphics import GenericDiagramWidget
|
33
|
+
from GridCal.Gui.messages import error_msg
|
31
34
|
|
32
35
|
if TYPE_CHECKING:
|
33
36
|
from GridCal.Gui.Diagrams.MapWidget.Substation.node_graphic_item import NodeGraphicItem
|
@@ -78,7 +81,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
78
81
|
Remove all segments from the scene
|
79
82
|
"""
|
80
83
|
for segment in self.segments_list:
|
81
|
-
self.editor.
|
84
|
+
self.editor.remove_only_graphic_element(segment)
|
82
85
|
|
83
86
|
self.segments_list = list()
|
84
87
|
|
@@ -158,39 +161,15 @@ class MapLineContainer(GenericDiagramWidget):
|
|
158
161
|
"""
|
159
162
|
self.clean()
|
160
163
|
|
161
|
-
diagram_locations: PointsGroup = self.editor.diagram.data.get(DeviceType.LineLocation.value, None)
|
162
|
-
|
163
164
|
# draw line locations
|
164
165
|
for elm in self.api_object.locations.data:
|
166
|
+
graphic_obj = self.editor.create_node(line_container=self,
|
167
|
+
api_object=elm,
|
168
|
+
lat=elm.lat, # 42.0 ...
|
169
|
+
lon=elm.long,
|
170
|
+
index=self.number_of_nodes()) # 2.7 ...
|
165
171
|
|
166
|
-
|
167
|
-
# no locations found, use the data from the api object
|
168
|
-
# lat = elm.lat
|
169
|
-
# lon = elm.long
|
170
|
-
pass
|
171
|
-
else:
|
172
|
-
|
173
|
-
# try to get location from the diagram
|
174
|
-
# We will not take the location of the element in the database because we want to keep...
|
175
|
-
# ... the diagram separated from database
|
176
|
-
# diagram_location = diagram_locations.locations.get(elm.idtag, None)
|
177
|
-
|
178
|
-
# if diagram_location is None:
|
179
|
-
# # no particular location found, use the data from the api object
|
180
|
-
# # lat = elm.lat
|
181
|
-
# # lon = elm.long
|
182
|
-
# pass
|
183
|
-
# else:
|
184
|
-
# # Draw only what's on the diagram
|
185
|
-
# # diagram data found, use it
|
186
|
-
|
187
|
-
graphic_obj = self.editor.create_node(line_container=self,
|
188
|
-
api_object=elm,
|
189
|
-
lat=elm.lat, # 42.0 ...
|
190
|
-
lon=elm.long,
|
191
|
-
index=self.number_of_nodes()) # 2.7 ...
|
192
|
-
|
193
|
-
self.register_new_node(node=graphic_obj)
|
172
|
+
self.register_new_node(node=graphic_obj)
|
194
173
|
|
195
174
|
# second pass: create the segments
|
196
175
|
self.redraw_segments()
|
@@ -206,6 +185,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
206
185
|
self.editor.map.diagram_scene.removeItem(seg)
|
207
186
|
|
208
187
|
self.nodes_list.remove(node)
|
188
|
+
self.api_object.locations.remove(node.api_object)
|
209
189
|
|
210
190
|
for nod in self.nodes_list:
|
211
191
|
if nod.index > node.index:
|
@@ -257,48 +237,16 @@ class MapLineContainer(GenericDiagramWidget):
|
|
257
237
|
# draw the segment in the scene
|
258
238
|
self.editor.add_to_scene(graphic_object=segment_graphic_object)
|
259
239
|
|
260
|
-
# diagram_locations: PointsGroup = self.editor.diagram.data.get(DeviceType.LineLocation.value, None)
|
261
|
-
#
|
262
|
-
# for idx, elm in enumerate(self.api_object.locations.data):
|
263
|
-
#
|
264
|
-
# if diagram_locations is None:
|
265
|
-
# # no locations found, use the data from the api object
|
266
|
-
# # lat = elm.lat
|
267
|
-
# # lon = elm.long
|
268
|
-
# pass
|
269
|
-
# else:
|
270
|
-
#
|
271
|
-
# # try to get location from the diagram
|
272
|
-
# diagram_location = diagram_locations.locations.get(elm.idtag, None)
|
273
|
-
#
|
274
|
-
# if diagram_location is None:
|
275
|
-
# # no particular location found, use the data from the api object
|
276
|
-
# # lat = elm.lat
|
277
|
-
# # lon = elm.long
|
278
|
-
# pass
|
279
|
-
# else:
|
280
|
-
# # Draw only what's on the diagram
|
281
|
-
# # diagram data found, use it
|
282
|
-
#
|
283
|
-
# if idx > 0:
|
284
|
-
# i1 = idx
|
285
|
-
# i2 = idx - 1
|
286
|
-
# # Assuming Connector takes (scene, node1, node2) as arguments
|
287
|
-
# segment_graphic_object = Segment(first=self.nodes_list[i1],
|
288
|
-
# second=self.nodes_list[i2])
|
289
|
-
#
|
290
|
-
# self.nodes_list[i1].needsUpdateFirst = True
|
291
|
-
# self.nodes_list[i2].needsUpdateSecond = True
|
292
|
-
# segment_graphic_object.needsUpdate = True
|
293
|
-
#
|
294
|
-
# # register the segment in the line
|
295
|
-
# self.add_segment(segment=segment_graphic_object)
|
296
|
-
#
|
297
|
-
# # draw the segment in the scene
|
298
|
-
# self.editor.add_to_scene(graphic_object=segment_graphic_object)
|
299
|
-
|
300
240
|
self.update_connectors()
|
301
241
|
|
242
|
+
self.editor.Update_widths()
|
243
|
+
|
244
|
+
def substation_to(self):
|
245
|
+
return self.editor.graphics_manager.query(elm=self.api_object.get_substation_to())
|
246
|
+
|
247
|
+
def substation_from(self):
|
248
|
+
return self.editor.graphics_manager.query(elm=self.api_object.get_substation_from())
|
249
|
+
|
302
250
|
def insert_new_node_at_position(self, index: int):
|
303
251
|
"""
|
304
252
|
Creates a new node in the list at the given position
|
@@ -307,7 +255,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
307
255
|
"""
|
308
256
|
|
309
257
|
# Check if the index is valid
|
310
|
-
if 1 <= index < len(self.api_object.locations.data):
|
258
|
+
if 1 <= index < len(self.api_object.locations.data) and len(self.api_object.locations.data) > 1:
|
311
259
|
|
312
260
|
nd1 = self.nodes_list[index]
|
313
261
|
nd2 = self.nodes_list[index - 1]
|
@@ -323,7 +271,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
323
271
|
z=new_api_node_data.alt,
|
324
272
|
seq=new_api_node_data.seq,
|
325
273
|
name=new_api_node_data.name,
|
326
|
-
idtag=
|
274
|
+
idtag=None, # generates new UUID
|
327
275
|
code=new_api_node_data.code)
|
328
276
|
|
329
277
|
self.api_object.locations.data.insert(index, new_api_object)
|
@@ -356,7 +304,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
356
304
|
# Return the newly created node
|
357
305
|
return graphic_obj
|
358
306
|
|
359
|
-
elif
|
307
|
+
elif len(self.api_object.locations.data) == 0:
|
360
308
|
|
361
309
|
substation_from_graphics = self.editor.graphics_manager.query(elm=self.api_object.get_substation_from())
|
362
310
|
substation_to_graphics = self.editor.graphics_manager.query(elm=self.api_object.get_substation_to())
|
@@ -375,7 +323,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
375
323
|
idtag="",
|
376
324
|
code="")
|
377
325
|
|
378
|
-
self.api_object.locations.data.insert(
|
326
|
+
self.api_object.locations.data.insert(0, new_api_object)
|
379
327
|
|
380
328
|
# Create a new graphical node item
|
381
329
|
|
@@ -383,19 +331,10 @@ class MapLineContainer(GenericDiagramWidget):
|
|
383
331
|
api_object=new_api_object,
|
384
332
|
lat=new_api_object.lat,
|
385
333
|
lon=new_api_object.long,
|
386
|
-
index=
|
387
|
-
|
388
|
-
idx = 0
|
389
|
-
|
390
|
-
for nod in self.nodes_list:
|
391
|
-
|
392
|
-
if idx >= index:
|
393
|
-
nod.index = nod.index + 1
|
394
|
-
|
395
|
-
idx = idx + 1
|
334
|
+
index=0)
|
396
335
|
|
397
336
|
# Add the node to the nodes list
|
398
|
-
self.nodes_list.insert(
|
337
|
+
self.nodes_list.insert(0, graphic_obj)
|
399
338
|
|
400
339
|
graphic_obj.updatePosition()
|
401
340
|
|
@@ -405,7 +344,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
405
344
|
# Return the newly created node
|
406
345
|
return graphic_obj
|
407
346
|
|
408
|
-
elif 0 == index or index
|
347
|
+
elif (0 == index or index >= len(self.api_object.locations.data) - 1):
|
409
348
|
|
410
349
|
substation_from_graphics = self.editor.graphics_manager.query(elm=self.api_object.get_substation_from())
|
411
350
|
substation_to_graphics = self.editor.graphics_manager.query(elm=self.api_object.get_substation_to())
|
@@ -417,7 +356,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
417
356
|
nd2 = self.nodes_list[0]
|
418
357
|
|
419
358
|
if index >= len(self.nodes_list):
|
420
|
-
|
359
|
+
nd1 = self.nodes_list[len(self.nodes_list) - 1]
|
421
360
|
|
422
361
|
new_lat = ((nd2.lat + nd1.lat) / 2)
|
423
362
|
new_long = ((nd2.lon + nd1.lon) / 2)
|
@@ -475,11 +414,11 @@ class MapLineContainer(GenericDiagramWidget):
|
|
475
414
|
if 0 < index < len(self.api_object.locations.data) and len(self.api_object.locations.data) > 3:
|
476
415
|
|
477
416
|
ln1 = Line()
|
478
|
-
ln1.
|
417
|
+
ln1.set_data_from(self.api_object)
|
479
418
|
# ln1 = self.api_object.copy()
|
480
419
|
|
481
420
|
ln2 = Line()
|
482
|
-
ln2.
|
421
|
+
ln2.set_data_from(self.api_object)
|
483
422
|
|
484
423
|
first_list = self.api_object.locations.data[:index]
|
485
424
|
second_list = self.api_object.locations.data[index:]
|
@@ -498,6 +437,9 @@ class MapLineContainer(GenericDiagramWidget):
|
|
498
437
|
api_obj.long = self.nodes_list[idx].lon
|
499
438
|
idx = idx + 1
|
500
439
|
|
440
|
+
ln1.bus_from = self.api_object.bus_from
|
441
|
+
ln2.bus_to = self.api_object.bus_to
|
442
|
+
|
501
443
|
l1 = self.editor.add_api_line(ln1, original=False)
|
502
444
|
l2 = self.editor.add_api_line(ln2, original=False)
|
503
445
|
|
@@ -506,10 +448,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
506
448
|
return first_list, second_list
|
507
449
|
else:
|
508
450
|
# Handle invalid index
|
509
|
-
|
510
|
-
|
511
|
-
def merge_line(self):
|
512
|
-
return 0
|
451
|
+
error_msg("Index out of range or invalid", "split line")
|
513
452
|
|
514
453
|
def disable_line(self):
|
515
454
|
"""
|
{GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py
RENAMED
@@ -324,8 +324,21 @@ class MapLineSegment(QGraphicsLineItem):
|
|
324
324
|
|
325
325
|
if len(self.container.nodes_list) == 0:
|
326
326
|
self.container.insert_new_node_at_position(0)
|
327
|
+
elif len(self.container.nodes_list) == 1:
|
328
|
+
if self.second == self.container.substation_to() or self.first == self.container.substation_to():
|
329
|
+
self.container.insert_new_node_at_position(1)
|
330
|
+
else:
|
331
|
+
self.container.insert_new_node_at_position(0)
|
327
332
|
else:
|
328
|
-
self.container.
|
333
|
+
if self.second == self.container.substation_to() or self.first == self.container.substation_to():
|
334
|
+
self.container.insert_new_node_at_position(len(self.container.nodes_list))
|
335
|
+
elif self.second == self.container.substation_from() or self.first == self.container.substation_from():
|
336
|
+
self.container.insert_new_node_at_position(0)
|
337
|
+
else:
|
338
|
+
if self.first.index > self.second.index:
|
339
|
+
self.container.insert_new_node_at_position(self.second.index)
|
340
|
+
elif self.first.index < self.second.index:
|
341
|
+
self.container.insert_new_node_at_position(self.second.index)
|
329
342
|
|
330
343
|
# TODO implement
|
331
344
|
# self.editor.split_line(line_graphics=self)
|
{GridCal-5.1.19 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py
RENAMED
@@ -79,7 +79,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
79
79
|
# self.api_object: LineLocation = api_object
|
80
80
|
self.index = index
|
81
81
|
|
82
|
-
self.resize(r)
|
82
|
+
self.resize(r * 10)
|
83
83
|
self.setAcceptHoverEvents(True) # Enable hover events for the item
|
84
84
|
self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable) # Allow moving the node
|
85
85
|
self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable) # Allow selecting the node
|
@@ -88,7 +88,6 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
88
88
|
|
89
89
|
self.hovered = False
|
90
90
|
self.enabled = True
|
91
|
-
self.itemSelected = False
|
92
91
|
|
93
92
|
# Create a pen with reduced line width
|
94
93
|
self.change_pen_width(0.001)
|
@@ -173,13 +172,13 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
173
172
|
Event handler for mouse press events.
|
174
173
|
"""
|
175
174
|
super().mousePressEvent(event)
|
176
|
-
|
175
|
+
selected_items = self.editor.map.view._scene.selectedItems()
|
176
|
+
if len(selected_items) < 2:
|
177
|
+
self.setSelected(True)
|
177
178
|
if self.enabled:
|
178
179
|
self.editor.map.view.disableMove = True
|
179
180
|
if event.button() == Qt.RightButton:
|
180
181
|
pass
|
181
|
-
elif event.button() == Qt.LeftButton:
|
182
|
-
self.selectItem()
|
183
182
|
|
184
183
|
def mouseReleaseEvent(self, event):
|
185
184
|
"""
|
@@ -190,11 +189,15 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
190
189
|
self.updateDiagram()
|
191
190
|
self.editor.map.view._scene.update()
|
192
191
|
|
192
|
+
selected_items = self.editor.map.view._scene.selectedItems()
|
193
|
+
if len(selected_items) < 2:
|
194
|
+
self.setSelected(True)
|
195
|
+
|
193
196
|
def hoverEnterEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
|
194
197
|
"""
|
195
198
|
Event handler for when the mouse enters the item.
|
196
199
|
"""
|
197
|
-
self.editor.inItem = True
|
200
|
+
self.editor.map.view.inItem = True
|
198
201
|
self.hovered = True
|
199
202
|
self.setNodeColor(QColor(Qt.red), QColor(Qt.red))
|
200
203
|
QApplication.instance().setOverrideCursor(Qt.PointingHandCursor)
|
@@ -203,7 +206,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
203
206
|
"""
|
204
207
|
Event handler for when the mouse leaves the item.
|
205
208
|
"""
|
206
|
-
self.editor.inItem = False
|
209
|
+
self.editor.map.view.inItem = False
|
207
210
|
self.hovered = False
|
208
211
|
self.setDefaultColor()
|
209
212
|
QApplication.instance().restoreOverrideCursor()
|
@@ -217,45 +220,22 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
217
220
|
menu = QMenu()
|
218
221
|
|
219
222
|
add_menu_entry(menu=menu,
|
220
|
-
text="
|
223
|
+
text="Merge",
|
221
224
|
icon_path="",
|
222
|
-
function_ptr=self.
|
225
|
+
function_ptr=self.MergeFunction)
|
223
226
|
|
224
227
|
add_menu_entry(menu=menu,
|
225
228
|
text="Split",
|
226
|
-
icon_path="",
|
229
|
+
icon_path=":/Icons/icons/divide.svg",
|
227
230
|
function_ptr=self.SplitFunction)
|
228
231
|
|
229
232
|
add_menu_entry(menu=menu,
|
230
|
-
text="
|
231
|
-
icon_path="",
|
232
|
-
function_ptr=self.MergeFunction)
|
233
|
-
|
234
|
-
add_menu_entry(menu=menu,
|
235
|
-
text="Remove",
|
236
|
-
icon_path="",
|
233
|
+
text="Delete",
|
234
|
+
icon_path=":/Icons/icons/delete.svg",
|
237
235
|
function_ptr=self.RemoveFunction)
|
238
236
|
|
239
237
|
menu.exec_(event.screenPos())
|
240
238
|
|
241
|
-
def selectItem(self):
|
242
|
-
"""
|
243
|
-
|
244
|
-
:return:
|
245
|
-
"""
|
246
|
-
if not self.itemSelected:
|
247
|
-
self.editor.map.view.selectedItems.append(self)
|
248
|
-
self.setNodeColor(QColor(Qt.yellow), QColor(Qt.yellow))
|
249
|
-
self.itemSelected = True
|
250
|
-
|
251
|
-
def deSelectItem(self):
|
252
|
-
"""
|
253
|
-
|
254
|
-
:return:
|
255
|
-
"""
|
256
|
-
self.itemSelected = False
|
257
|
-
self.setDefaultColor()
|
258
|
-
|
259
239
|
def AddFunction(self):
|
260
240
|
"""
|
261
241
|
|
@@ -312,10 +292,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
312
292
|
:return:
|
313
293
|
"""
|
314
294
|
# Example: color assignment
|
315
|
-
|
316
|
-
self.setNodeColor(QColor(Qt.yellow), QColor(Qt.yellow))
|
317
|
-
else:
|
318
|
-
self.setNodeColor(self.colorInner, self.colorBorder)
|
295
|
+
self.setNodeColor(self.colorInner, self.colorBorder)
|
319
296
|
|
320
297
|
def getPos(self) -> QPointF:
|
321
298
|
"""
|
@@ -25,6 +25,8 @@ from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
|
|
25
25
|
from GridCal.Gui.GuiFunctions import add_menu_entry
|
26
26
|
from GridCal.Gui.messages import yes_no_question
|
27
27
|
from GridCal.Gui.GeneralDialogues import InputNumberDialogue
|
28
|
+
|
29
|
+
from GridCalEngine.Devices.Substation.bus import Bus
|
28
30
|
from GridCalEngine.Devices import VoltageLevel
|
29
31
|
from GridCalEngine.Devices.Substation.substation import Substation
|
30
32
|
from GridCalEngine.enumerations import DeviceType
|
@@ -69,7 +71,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
69
71
|
lon=lon)
|
70
72
|
|
71
73
|
self.line_container = None
|
72
|
-
self.editor: GridMapWidget = editor #
|
74
|
+
self.editor: GridMapWidget = editor # reassign for the types to be clear
|
73
75
|
self.api_object: Substation = api_object
|
74
76
|
|
75
77
|
self.lat = lat
|
@@ -101,16 +103,21 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
101
103
|
# self.setZValue(1)
|
102
104
|
self.voltage_level_graphics: List[VoltageLevelGraphicItem] = list()
|
103
105
|
|
104
|
-
def move_to(self, lat: float, lon: float):
|
106
|
+
def move_to(self, lat: float, lon: float) -> Tuple[float, float]:
|
105
107
|
"""
|
106
108
|
|
107
109
|
:param lat:
|
108
110
|
:param lon:
|
109
|
-
:return:
|
111
|
+
:return: x, y
|
110
112
|
"""
|
111
113
|
x, y = self.editor.to_x_y(lat=lat, lon=lon)
|
112
114
|
self.setRect(x, y, self.rect().width(), self.rect().height())
|
113
115
|
|
116
|
+
for vl in self.voltage_level_graphics:
|
117
|
+
vl.center_on_substation()
|
118
|
+
|
119
|
+
return x, y
|
120
|
+
|
114
121
|
def register_voltage_level(self, vl: VoltageLevelGraphicItem):
|
115
122
|
"""
|
116
123
|
|
@@ -179,7 +186,6 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
179
186
|
for vl_graphics in self.voltage_level_graphics:
|
180
187
|
vl_graphics.center_on_substation()
|
181
188
|
|
182
|
-
self.editor.update_connectors()
|
183
189
|
self.updateDiagram() # always update
|
184
190
|
|
185
191
|
def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
|
@@ -187,10 +193,13 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
187
193
|
Event handler for mouse press events.
|
188
194
|
"""
|
189
195
|
super().mousePressEvent(event)
|
196
|
+
selected_items = self.editor.map.view._scene.selectedItems()
|
197
|
+
if len(selected_items) < 2:
|
198
|
+
self.setSelected(True)
|
199
|
+
|
190
200
|
event.setAccepted(True)
|
191
201
|
self.editor.map.view.disableMove = True
|
192
202
|
|
193
|
-
print("SE mouse press")
|
194
203
|
if self.api_object is not None:
|
195
204
|
self.editor.set_editor_model(api_object=self.api_object,
|
196
205
|
dictionary_of_lists={
|
@@ -202,6 +211,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
202
211
|
DeviceType.ZoneDevice: self.editor.circuit.get_zones(),
|
203
212
|
})
|
204
213
|
|
214
|
+
|
205
215
|
def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent):
|
206
216
|
"""
|
207
217
|
Event handler for mouse release events.
|
@@ -215,6 +225,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
215
225
|
"""
|
216
226
|
Event handler for when the mouse enters the item.
|
217
227
|
"""
|
228
|
+
self.editor.map.view.inItem = True
|
218
229
|
self.setNodeColor(QColor(Qt.red), QColor(Qt.red))
|
219
230
|
self.hovered = True
|
220
231
|
QApplication.instance().setOverrideCursor(Qt.PointingHandCursor)
|
@@ -223,6 +234,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
223
234
|
"""
|
224
235
|
Event handler for when the mouse leaves the item.
|
225
236
|
"""
|
237
|
+
self.editor.map.view.inItem = False
|
226
238
|
self.hovered = False
|
227
239
|
self.setDefaultColor()
|
228
240
|
QApplication.instance().restoreOverrideCursor()
|
@@ -239,6 +251,11 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
239
251
|
icon_path="",
|
240
252
|
function_ptr=self.add_voltage_level)
|
241
253
|
|
254
|
+
add_menu_entry(menu=menu,
|
255
|
+
text="Create line",
|
256
|
+
icon_path="",
|
257
|
+
function_ptr=self.create_new_line)
|
258
|
+
|
242
259
|
add_menu_entry(menu=menu,
|
243
260
|
text="Move to API coordinates",
|
244
261
|
icon_path="",
|
@@ -251,7 +268,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
251
268
|
|
252
269
|
add_menu_entry(menu=menu,
|
253
270
|
text="ADD node",
|
254
|
-
icon_path="",
|
271
|
+
icon_path=":/Icons/icons/divide.svg",
|
255
272
|
function_ptr=self.add_function)
|
256
273
|
|
257
274
|
add_menu_entry(menu=menu,
|
@@ -259,8 +276,16 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
259
276
|
icon_path="",
|
260
277
|
function_ptr=self.new_substation_diagram)
|
261
278
|
|
279
|
+
|
280
|
+
|
262
281
|
menu.exec_(event.screenPos())
|
263
282
|
|
283
|
+
def create_new_line(self):
|
284
|
+
"""
|
285
|
+
Create a new line in the map wizard
|
286
|
+
"""
|
287
|
+
self.editor.createNewLineWizard()
|
288
|
+
|
264
289
|
def add_function(self):
|
265
290
|
"""
|
266
291
|
|
@@ -277,9 +302,11 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
277
302
|
|
278
303
|
for idtag, graphic_object in dev_dict.items():
|
279
304
|
substation_from_graphics = self.editor.graphics_manager.query(
|
280
|
-
elm=graphic_object.api_object.get_substation_from()
|
305
|
+
elm=graphic_object.api_object.get_substation_from()
|
306
|
+
)
|
281
307
|
substation_to_graphics = self.editor.graphics_manager.query(
|
282
|
-
elm=graphic_object.api_object.get_substation_to()
|
308
|
+
elm=graphic_object.api_object.get_substation_to()
|
309
|
+
)
|
283
310
|
lines_info.append((idtag, graphic_object, substation_from_graphics, substation_to_graphics))
|
284
311
|
|
285
312
|
# Now, iterate over the collected information
|
@@ -311,8 +338,8 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
311
338
|
"Move substation graphics")
|
312
339
|
|
313
340
|
if ok:
|
314
|
-
self.move_to(lat=self.api_object.latitude, lon=self.api_object.longitude)
|
315
|
-
self.
|
341
|
+
x, y = self.move_to(lat=self.api_object.latitude, lon=self.api_object.longitude) # this moves the vl too
|
342
|
+
self.set_callabacks(x, y)
|
316
343
|
|
317
344
|
def new_substation_diagram(self):
|
318
345
|
"""
|
@@ -329,7 +356,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
329
356
|
inpt = InputNumberDialogue(
|
330
357
|
min_value=1.0,
|
331
358
|
max_value=100000.0,
|
332
|
-
default_value=
|
359
|
+
default_value=self.editor.diagram.default_bus_voltage,
|
333
360
|
title="Add voltage level",
|
334
361
|
text="Voltage (kV)",
|
335
362
|
)
|
@@ -342,7 +369,14 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
342
369
|
Vnom=kv,
|
343
370
|
substation=self.api_object)
|
344
371
|
|
372
|
+
bus = Bus(name=f"Bus {self.api_object.name}",
|
373
|
+
Vnom=kv,
|
374
|
+
substation=self.api_object,
|
375
|
+
voltage_level=vl)
|
376
|
+
|
345
377
|
self.editor.circuit.add_voltage_level(vl)
|
378
|
+
self.editor.circuit.add_bus(obj=bus)
|
379
|
+
|
346
380
|
self.editor.add_api_voltage_level(substation_graphics=self,
|
347
381
|
api_object=vl)
|
348
382
|
|
@@ -19,10 +19,13 @@ from typing import TYPE_CHECKING
|
|
19
19
|
from PySide6 import QtWidgets
|
20
20
|
from PySide6.QtCore import Qt, QPointF
|
21
21
|
from PySide6.QtGui import QBrush, QColor
|
22
|
-
from PySide6.QtWidgets import QGraphicsSceneMouseEvent, QGraphicsEllipseItem
|
22
|
+
from PySide6.QtWidgets import (QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent, QGraphicsEllipseItem)
|
23
|
+
|
23
24
|
from GridCal.Gui.Diagrams.generic_graphics import GenericDiagramWidget
|
25
|
+
from GridCal.Gui.GuiFunctions import add_menu_entry
|
24
26
|
|
25
27
|
from GridCalEngine.Devices.Substation.voltage_level import VoltageLevel
|
28
|
+
from GridCalEngine.Devices.Substation.bus import Bus
|
26
29
|
from GridCalEngine.enumerations import DeviceType
|
27
30
|
|
28
31
|
if TYPE_CHECKING: # Only imports the below statements during type checking
|
@@ -61,19 +64,21 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
61
64
|
api_object=api_object,
|
62
65
|
editor=editor,
|
63
66
|
draw_labels=draw_labels)
|
64
|
-
QGraphicsEllipseItem.__init__(self, parent_center.x(), parent_center.y(), r
|
67
|
+
QGraphicsEllipseItem.__init__(self, parent_center.x(), parent_center.y(), r * api_object.Vnom * 0.01,
|
68
|
+
r * api_object.Vnom * 0.01, parent)
|
65
69
|
|
66
70
|
parent.register_voltage_level(vl=self)
|
67
71
|
|
68
72
|
self.editor: GridMapWidget = editor # to reinforce the type
|
69
73
|
self.api_object: VoltageLevel = api_object # to reinforce the type
|
70
74
|
|
71
|
-
self.radius = r
|
72
|
-
print(f"VL created at x:{parent_center.x()}, y:{parent_center.y()}")
|
75
|
+
self.radius = r * api_object.Vnom * 0.01
|
76
|
+
# print(f"VL created at x:{parent_center.x()}, y:{parent_center.y()}")
|
73
77
|
|
74
78
|
self.setAcceptHoverEvents(True) # Enable hover events for the item
|
75
79
|
# self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable) # Allow moving the node
|
76
|
-
self.setFlag(
|
80
|
+
self.setFlag(
|
81
|
+
self.GraphicsItemFlag.ItemIsSelectable | self.GraphicsItemFlag.ItemIsMovable) # Allow selecting the node
|
77
82
|
|
78
83
|
# Create a pen with reduced line width
|
79
84
|
self.change_pen_width(0.5)
|
@@ -90,7 +95,7 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
90
95
|
self.needsUpdate = False
|
91
96
|
self.setZValue(0)
|
92
97
|
|
93
|
-
def center_on_substation(self):
|
98
|
+
def center_on_substation(self) -> None:
|
94
99
|
"""
|
95
100
|
Centers the graphic item on the substation
|
96
101
|
"""
|
@@ -99,6 +104,16 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
99
104
|
yc = parent_center.y() - self.rect().height() / 2
|
100
105
|
self.setRect(xc, yc, self.rect().width(), self.rect().height())
|
101
106
|
|
107
|
+
def move_to_xy(self, x: float, y: float):
|
108
|
+
"""
|
109
|
+
|
110
|
+
:param x:
|
111
|
+
:param y:
|
112
|
+
:return:
|
113
|
+
"""
|
114
|
+
self.setRect(x, y, self.rect().width(), self.rect().height())
|
115
|
+
return x, y
|
116
|
+
|
102
117
|
def updateDiagram(self) -> None:
|
103
118
|
"""
|
104
119
|
|
@@ -120,10 +135,9 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
120
135
|
"""
|
121
136
|
Event handler for mouse move events.
|
122
137
|
"""
|
123
|
-
super().mouseMoveEvent(event)
|
138
|
+
# super().mouseMoveEvent(event)
|
124
139
|
if self.hovered:
|
125
|
-
|
126
|
-
self.editor.update_connectors()
|
140
|
+
self.parent.mouseMoveEvent(event)
|
127
141
|
|
128
142
|
def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
|
129
143
|
"""
|
@@ -160,6 +174,18 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
160
174
|
self.hovered = False
|
161
175
|
self.setNodeColor(self.colorInner, self.colorBorder)
|
162
176
|
|
177
|
+
def contextMenuEvent(self, event: QGraphicsSceneContextMenuEvent):
|
178
|
+
"""
|
179
|
+
|
180
|
+
:param event:
|
181
|
+
"""
|
182
|
+
menu = QMenu()
|
183
|
+
|
184
|
+
add_menu_entry(menu=menu,
|
185
|
+
text="Add bus",
|
186
|
+
icon_path="",
|
187
|
+
function_ptr=self.add_bus)
|
188
|
+
|
163
189
|
def setNodeColor(self, inner_color: QColor = None, border_color: QColor = None) -> None:
|
164
190
|
"""
|
165
191
|
|
@@ -197,3 +223,14 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
197
223
|
pen = self.pen()
|
198
224
|
pen.setWidth(width)
|
199
225
|
self.setPen(pen)
|
226
|
+
|
227
|
+
def add_bus(self):
|
228
|
+
"""
|
229
|
+
Add bus
|
230
|
+
"""
|
231
|
+
bus = Bus(name=f"Bus {self.api_object.name}",
|
232
|
+
Vnom=self.api_object.Vnom,
|
233
|
+
substation=self.parent.api_object,
|
234
|
+
voltage_level=self.api_object)
|
235
|
+
|
236
|
+
self.editor.circuit.add_bus(obj=bus)
|