GridCal 5.1.20__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.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +17 -37
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +4 -1
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +16 -39
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +35 -5
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +33 -5
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +4 -2
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +4 -1
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +51 -12
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +17 -14
- GridCal-5.1.21/GridCal/Gui/Diagrams/MapWidget/new_line_dialogue.py +125 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +8 -4
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +55 -28
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/diagrams_model.py +9 -8
- {GridCal-5.1.20 → 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.20 → GridCal-5.1.21}/GridCal/Gui/Main/MainWindow.py +221 -209
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +34 -10
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Model/objects.py +6 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Results/results.py +4 -1
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +1 -3
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/base_gui.py +23 -15
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/io.py +157 -66
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/simulations.py +1 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/icons_rc.py +541 -254
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +1 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/associations_model.py +19 -2
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/object_model.py +21 -1
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/pandas_model.py +20 -0
- {GridCal-5.1.20 → 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.20 → GridCal-5.1.21}/GridCal/Session/file_handler.py +9 -2
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Session/results_model.py +20 -0
- {GridCal-5.1.20 → 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.20 → GridCal-5.1.21}/PKG-INFO +1 -1
- GridCal-5.1.20/GridCal/Gui/Diagrams/MapWidget/logger.py +0 -4
- GridCal-5.1.20/GridCal/templates.py +0 -156
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ExecuteGridCal.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Analysis/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Analysis/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ConsoleWidget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/GeneralDialogues.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/LoadDesigner → GridCal-5.1.21/GridCal/Gui/LoadCatalogue}/__init__.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Model → GridCal-5.1.21/GridCal/Gui/LoadDesigner}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Results → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Model}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Scripting → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Results}/__init__.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Server → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Scripting}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Settings → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Server}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses → GridCal-5.1.21/GridCal/Gui/Main/SubClasses/Settings}/__init__.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main → GridCal-5.1.21/GridCal/Gui/Main/SubClasses}/__init__.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/ProfilesInput → GridCal-5.1.21/GridCal/Gui/Main}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/object_select_window.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/RosetaExplorer → GridCal-5.1.21/GridCal/Gui/ProfilesInput}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/SigmaAnalysis → GridCal-5.1.21/GridCal/Gui/RosetaExplorer}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/SolarPowerWizard → GridCal-5.1.21/GridCal/Gui/SigmaAnalysis}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/SyncDialogue → GridCal-5.1.21/GridCal/Gui/SolarPowerWizard}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/SystemScaler → GridCal-5.1.21/GridCal/Gui/SyncDialogue}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/TowerBuilder → GridCal-5.1.21/GridCal/Gui/SystemScaler}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/TreeModelViewer → GridCal-5.1.21/GridCal/Gui/TowerBuilder}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/test_.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Visualization → GridCal-5.1.21/GridCal/Gui/TreeModelViewer}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Widgets → GridCal-5.1.21/GridCal/Gui/Visualization}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Visualization/visualization.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/WindPowerWizard → GridCal-5.1.21/GridCal/Gui/Widgets}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {GridCal-5.1.20/GridCal/Gui → GridCal-5.1.21/GridCal/Gui/WindPowerWizard}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {GridCal-5.1.20/GridCal/Session → GridCal-5.1.21/GridCal/Gui}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/messages.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/plot_config.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/themes.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/update_gui_all.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/update_gui_common.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/LICENSE.txt +0 -0
- {GridCal-5.1.20/GridCal/ThirdParty → GridCal-5.1.21/GridCal/Session}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Session/export_results_driver.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Session/server_driver.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Session/session.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Session/synchronization_driver.py +0 -0
- {GridCal-5.1.20/GridCal/ThirdParty/qdarktheme/_icon → GridCal-5.1.21/GridCal/ThirdParty}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {GridCal-5.1.20/GridCal/ThirdParty/qdarktheme/_template → GridCal-5.1.21/GridCal/ThirdParty/qdarktheme/_icon}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {GridCal-5.1.20/GridCal/data → GridCal-5.1.21/GridCal/ThirdParty/qdarktheme/_template}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/data/cables.csv +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/data/sequence_lines.csv +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/data/transformers.csv +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/data/wires.csv +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/GridCal/update.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/setup.cfg +0 -0
- {GridCal-5.1.20 → GridCal-5.1.21}/setup.py +0 -0
{GridCal-5.1.20 → 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
|
@@ -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:
|
@@ -291,7 +271,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
291
271
|
z=new_api_node_data.alt,
|
292
272
|
seq=new_api_node_data.seq,
|
293
273
|
name=new_api_node_data.name,
|
294
|
-
idtag=
|
274
|
+
idtag=None, # generates new UUID
|
295
275
|
code=new_api_node_data.code)
|
296
276
|
|
297
277
|
self.api_object.locations.data.insert(index, new_api_object)
|
@@ -434,11 +414,11 @@ class MapLineContainer(GenericDiagramWidget):
|
|
434
414
|
if 0 < index < len(self.api_object.locations.data) and len(self.api_object.locations.data) > 3:
|
435
415
|
|
436
416
|
ln1 = Line()
|
437
|
-
ln1.
|
417
|
+
ln1.set_data_from(self.api_object)
|
438
418
|
# ln1 = self.api_object.copy()
|
439
419
|
|
440
420
|
ln2 = Line()
|
441
|
-
ln2.
|
421
|
+
ln2.set_data_from(self.api_object)
|
442
422
|
|
443
423
|
first_list = self.api_object.locations.data[:index]
|
444
424
|
second_list = self.api_object.locations.data[index:]
|
@@ -457,6 +437,9 @@ class MapLineContainer(GenericDiagramWidget):
|
|
457
437
|
api_obj.long = self.nodes_list[idx].lon
|
458
438
|
idx = idx + 1
|
459
439
|
|
440
|
+
ln1.bus_from = self.api_object.bus_from
|
441
|
+
ln2.bus_to = self.api_object.bus_to
|
442
|
+
|
460
443
|
l1 = self.editor.add_api_line(ln1, original=False)
|
461
444
|
l2 = self.editor.add_api_line(ln2, original=False)
|
462
445
|
|
@@ -465,10 +448,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
465
448
|
return first_list, second_list
|
466
449
|
else:
|
467
450
|
# Handle invalid index
|
468
|
-
|
469
|
-
|
470
|
-
def merge_line(self):
|
471
|
-
return 0
|
451
|
+
error_msg("Index out of range or invalid", "split line")
|
472
452
|
|
473
453
|
def disable_line(self):
|
474
454
|
"""
|
{GridCal-5.1.20 → GridCal-5.1.21}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py
RENAMED
@@ -335,7 +335,10 @@ class MapLineSegment(QGraphicsLineItem):
|
|
335
335
|
elif self.second == self.container.substation_from() or self.first == self.container.substation_from():
|
336
336
|
self.container.insert_new_node_at_position(0)
|
337
337
|
else:
|
338
|
-
self.
|
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)
|
339
342
|
|
340
343
|
# TODO implement
|
341
344
|
# self.editor.split_line(line_graphics=self)
|
{GridCal-5.1.20 → 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
|
@@ -191,10 +193,13 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
191
193
|
Event handler for mouse press events.
|
192
194
|
"""
|
193
195
|
super().mousePressEvent(event)
|
196
|
+
selected_items = self.editor.map.view._scene.selectedItems()
|
197
|
+
if len(selected_items) < 2:
|
198
|
+
self.setSelected(True)
|
199
|
+
|
194
200
|
event.setAccepted(True)
|
195
201
|
self.editor.map.view.disableMove = True
|
196
202
|
|
197
|
-
print("SE mouse press")
|
198
203
|
if self.api_object is not None:
|
199
204
|
self.editor.set_editor_model(api_object=self.api_object,
|
200
205
|
dictionary_of_lists={
|
@@ -206,6 +211,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
206
211
|
DeviceType.ZoneDevice: self.editor.circuit.get_zones(),
|
207
212
|
})
|
208
213
|
|
214
|
+
|
209
215
|
def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent):
|
210
216
|
"""
|
211
217
|
Event handler for mouse release events.
|
@@ -219,6 +225,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
219
225
|
"""
|
220
226
|
Event handler for when the mouse enters the item.
|
221
227
|
"""
|
228
|
+
self.editor.map.view.inItem = True
|
222
229
|
self.setNodeColor(QColor(Qt.red), QColor(Qt.red))
|
223
230
|
self.hovered = True
|
224
231
|
QApplication.instance().setOverrideCursor(Qt.PointingHandCursor)
|
@@ -227,6 +234,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
227
234
|
"""
|
228
235
|
Event handler for when the mouse leaves the item.
|
229
236
|
"""
|
237
|
+
self.editor.map.view.inItem = False
|
230
238
|
self.hovered = False
|
231
239
|
self.setDefaultColor()
|
232
240
|
QApplication.instance().restoreOverrideCursor()
|
@@ -243,6 +251,11 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
243
251
|
icon_path="",
|
244
252
|
function_ptr=self.add_voltage_level)
|
245
253
|
|
254
|
+
add_menu_entry(menu=menu,
|
255
|
+
text="Create line",
|
256
|
+
icon_path="",
|
257
|
+
function_ptr=self.create_new_line)
|
258
|
+
|
246
259
|
add_menu_entry(menu=menu,
|
247
260
|
text="Move to API coordinates",
|
248
261
|
icon_path="",
|
@@ -263,8 +276,16 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
263
276
|
icon_path="",
|
264
277
|
function_ptr=self.new_substation_diagram)
|
265
278
|
|
279
|
+
|
280
|
+
|
266
281
|
menu.exec_(event.screenPos())
|
267
282
|
|
283
|
+
def create_new_line(self):
|
284
|
+
"""
|
285
|
+
Create a new line in the map wizard
|
286
|
+
"""
|
287
|
+
self.editor.createNewLineWizard()
|
288
|
+
|
268
289
|
def add_function(self):
|
269
290
|
"""
|
270
291
|
|
@@ -281,9 +302,11 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
281
302
|
|
282
303
|
for idtag, graphic_object in dev_dict.items():
|
283
304
|
substation_from_graphics = self.editor.graphics_manager.query(
|
284
|
-
elm=graphic_object.api_object.get_substation_from()
|
305
|
+
elm=graphic_object.api_object.get_substation_from()
|
306
|
+
)
|
285
307
|
substation_to_graphics = self.editor.graphics_manager.query(
|
286
|
-
elm=graphic_object.api_object.get_substation_to()
|
308
|
+
elm=graphic_object.api_object.get_substation_to()
|
309
|
+
)
|
287
310
|
lines_info.append((idtag, graphic_object, substation_from_graphics, substation_to_graphics))
|
288
311
|
|
289
312
|
# Now, iterate over the collected information
|
@@ -333,7 +356,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
333
356
|
inpt = InputNumberDialogue(
|
334
357
|
min_value=1.0,
|
335
358
|
max_value=100000.0,
|
336
|
-
default_value=
|
359
|
+
default_value=self.editor.diagram.default_bus_voltage,
|
337
360
|
title="Add voltage level",
|
338
361
|
text="Voltage (kV)",
|
339
362
|
)
|
@@ -346,7 +369,14 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
346
369
|
Vnom=kv,
|
347
370
|
substation=self.api_object)
|
348
371
|
|
372
|
+
bus = Bus(name=f"Bus {self.api_object.name}",
|
373
|
+
Vnom=kv,
|
374
|
+
substation=self.api_object,
|
375
|
+
voltage_level=vl)
|
376
|
+
|
349
377
|
self.editor.circuit.add_voltage_level(vl)
|
378
|
+
self.editor.circuit.add_bus(obj=bus)
|
379
|
+
|
350
380
|
self.editor.add_api_voltage_level(substation_graphics=self,
|
351
381
|
api_object=vl)
|
352
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 * api_object.Vnom
|
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 * api_object.Vnom
|
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)
|
@@ -169,6 +174,18 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
169
174
|
self.hovered = False
|
170
175
|
self.setNodeColor(self.colorInner, self.colorBorder)
|
171
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
|
+
|
172
189
|
def setNodeColor(self, inner_color: QColor = None, border_color: QColor = None) -> None:
|
173
190
|
"""
|
174
191
|
|
@@ -206,3 +223,14 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
|
|
206
223
|
pen = self.pen()
|
207
224
|
pen.setWidth(width)
|
208
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)
|
@@ -10,14 +10,16 @@ from urllib import request
|
|
10
10
|
from collections.abc import Callable
|
11
11
|
from PySide6.QtGui import QPixmap
|
12
12
|
from PySide6.QtCore import QThread
|
13
|
-
from GridCal.Gui.Diagrams.MapWidget.logger import log
|
14
|
-
|
15
13
|
|
16
14
|
# SSL magic to solve the certificates hell
|
17
15
|
# https://stackoverflow.com/questions/68275857/urllib-error-urlerror-urlopen-error-ssl-certificate-verify-failed-certifica
|
18
16
|
ssl._create_default_https_context = ssl._create_stdlib_context
|
19
17
|
|
20
18
|
|
19
|
+
def log(val: str):
|
20
|
+
print(val)
|
21
|
+
|
22
|
+
|
21
23
|
class TileWorker(QThread):
|
22
24
|
"""Thread class that gets request from queue, loads tile, calls callback."""
|
23
25
|
|
@@ -18,7 +18,10 @@ from typing import List, Union
|
|
18
18
|
from collections.abc import Callable
|
19
19
|
from GridCal.Gui.Diagrams.MapWidget.Tiles.base_tiles import BaseTiles
|
20
20
|
from GridCal.Gui.Diagrams.MapWidget.Tiles.tile_worker import TileWorker
|
21
|
-
|
21
|
+
|
22
|
+
|
23
|
+
def log(val: str):
|
24
|
+
print(val)
|
22
25
|
|
23
26
|
# # set how old disk-cache tiles can be before we re-request them from the
|
24
27
|
# # server. this is the number of days old a tile is before we re-request.
|
@@ -50,6 +50,7 @@ from GridCal.Gui.Diagrams.MapWidget.Substation.node_graphic_item import NodeGrap
|
|
50
50
|
from GridCal.Gui.Diagrams.MapWidget.Substation.substation_graphic_item import SubstationGraphicItem
|
51
51
|
from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
|
52
52
|
from GridCal.Gui.Diagrams.MapWidget.map_widget import MapWidget
|
53
|
+
from GridCal.Gui.Diagrams.MapWidget.new_line_dialogue import NewMapLineDialogue
|
53
54
|
import GridCal.Gui.Visualization.visualization as viz
|
54
55
|
import GridCalEngine.Devices.Diagrams.palettes as palettes
|
55
56
|
from GridCal.Gui.Diagrams.graphics_manager import ALL_MAP_GRAPHICS
|
@@ -79,7 +80,7 @@ def haversine_distance(lat1: float, lon1: float, lat2: float, lon2: float) -> fl
|
|
79
80
|
return R * c
|
80
81
|
|
81
82
|
|
82
|
-
def compare_options(it1: NodeGraphicItem, it2: NodeGraphicItem)
|
83
|
+
def compare_options(it1: NodeGraphicItem, it2: NodeGraphicItem):
|
83
84
|
"""
|
84
85
|
|
85
86
|
:param it1:
|
@@ -105,9 +106,9 @@ def compare_options(it1: NodeGraphicItem, it2: NodeGraphicItem) -> Tuple[NodeGra
|
|
105
106
|
first_first_lat, first_first_long)
|
106
107
|
|
107
108
|
if distance_1_to_2 <= distance_2_to_1:
|
108
|
-
return it1, it2
|
109
|
+
return it1, it2, it1.line_container.api_object.bus_from, it2.line_container.api_object.bus_to
|
109
110
|
else:
|
110
|
-
return it2, it1
|
111
|
+
return it2, it1, it2.line_container.api_object.bus_from, it1.line_container.api_object.bus_to
|
111
112
|
|
112
113
|
|
113
114
|
class MapLibraryModel(QStandardItemModel):
|
@@ -441,26 +442,35 @@ class GridMapWidget(BaseDiagramWidget):
|
|
441
442
|
|
442
443
|
:return:
|
443
444
|
"""
|
444
|
-
|
445
|
+
|
446
|
+
selected_items = self.map.view._scene.selectedItems()
|
447
|
+
selectedItems = []
|
448
|
+
for item in selected_items:
|
449
|
+
selectedItems.append(item)
|
450
|
+
|
451
|
+
if len(selectedItems) < 2:
|
445
452
|
return 0
|
446
453
|
|
447
|
-
it1 =
|
448
|
-
it2 =
|
454
|
+
it1 = selectedItems[0]
|
455
|
+
it2 = selectedItems[1]
|
449
456
|
|
450
457
|
if it1 == it2:
|
451
458
|
return 0
|
452
459
|
|
453
460
|
newline = Line()
|
454
|
-
newline.
|
461
|
+
newline.set_data_from(it1.line_container.api_object)
|
455
462
|
# ln1 = self.api_object.copy()
|
456
463
|
|
457
|
-
better_first, better_second = compare_options(it1, it2)
|
464
|
+
better_first, better_second, busfrom, busto = compare_options(it1, it2)
|
458
465
|
|
459
466
|
first_list = better_first.line_container.api_object.locations.data
|
460
467
|
second_list = better_second.line_container.api_object.locations.data
|
461
468
|
|
462
469
|
newline.locations.data = first_list + second_list
|
463
470
|
|
471
|
+
newline.bus_from = busfrom
|
472
|
+
newline.bus_to = busto
|
473
|
+
|
464
474
|
idx = 0
|
465
475
|
for nod in better_first.line_container.nodes_list:
|
466
476
|
newline.locations.data[idx].lat = nod.lat
|
@@ -477,6 +487,34 @@ class GridMapWidget(BaseDiagramWidget):
|
|
477
487
|
better_first.line_container.disable_line()
|
478
488
|
better_second.line_container.disable_line()
|
479
489
|
|
490
|
+
def createNewLineWizard(self):
|
491
|
+
"""
|
492
|
+
Create a new line in the map with dialogues
|
493
|
+
"""
|
494
|
+
|
495
|
+
selected_items = self.map.view._scene.selectedItems()
|
496
|
+
selectedItems = []
|
497
|
+
for item in selected_items:
|
498
|
+
selectedItems.append(item)
|
499
|
+
|
500
|
+
if len(selectedItems) < 2:
|
501
|
+
return 0
|
502
|
+
|
503
|
+
it1: SubstationGraphicItem = selectedItems[0]
|
504
|
+
it2: SubstationGraphicItem = selectedItems[1]
|
505
|
+
|
506
|
+
if it1 == it2:
|
507
|
+
return None
|
508
|
+
|
509
|
+
dialog = NewMapLineDialogue(grid=self.circuit, se_from=it1.api_object, se_to=it2.api_object)
|
510
|
+
dialog.exec()
|
511
|
+
if dialog.is_valid():
|
512
|
+
bus1 = dialog.bus_from()
|
513
|
+
bus2 = dialog.bus_to()
|
514
|
+
if bus1 is not None and bus2 is not None:
|
515
|
+
newline = Line(bus_from=bus1, bus_to=bus2)
|
516
|
+
self.add_api_line(newline, original=True)
|
517
|
+
|
480
518
|
def removeNode(self, node: NodeGraphicItem):
|
481
519
|
"""
|
482
520
|
Removes node from diagram and scene
|
@@ -801,15 +839,16 @@ class GridMapWidget(BaseDiagramWidget):
|
|
801
839
|
y0 = point0.y()
|
802
840
|
lat, lon = self.to_lat_lon(x=x0, y=y0)
|
803
841
|
|
804
|
-
print(f"
|
842
|
+
# print(f"Dropped at x:{x0}, y:{y0}, lat:{lat}, lon:{lon}")
|
805
843
|
|
806
844
|
if obj_type == self.library_model.get_substation_mime_data():
|
807
|
-
|
845
|
+
|
808
846
|
api_object = Substation(name=f"Substation {self.circuit.get_substation_number()}",
|
809
847
|
latitude=lat,
|
810
848
|
longitude=lon)
|
811
849
|
self.circuit.add_substation(obj=api_object)
|
812
|
-
self.add_api_substation(api_object=api_object, lat=lat, lon=lon)
|
850
|
+
substation_graphics = self.add_api_substation(api_object=api_object, lat=lat, lon=lon)
|
851
|
+
substation_graphics.add_voltage_level()
|
813
852
|
|
814
853
|
def wheelEvent(self, event: QWheelEvent):
|
815
854
|
"""
|
@@ -911,7 +950,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
911
950
|
|
912
951
|
voltage_cmap = viz.get_voltage_color_map()
|
913
952
|
loading_cmap = viz.get_loading_color_map()
|
914
|
-
bus_types = ['', 'PQ', 'PV', 'Slack', '
|
953
|
+
bus_types = ['', 'PQ', 'PV', 'Slack', 'PQV', 'P']
|
915
954
|
|
916
955
|
vmin = 0
|
917
956
|
vmax = 1.2
|