GridCal 5.1.20__tar.gz → 5.1.22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ExecuteGridCal.py +12 -10
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +19 -39
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +4 -1
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +16 -39
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +46 -27
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +33 -5
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +4 -2
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +5 -1
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +91 -46
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +35 -21
- GridCal-5.1.22/GridCal/Gui/Diagrams/MapWidget/new_line_dialogue.py +125 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +27 -1
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +8 -4
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +29 -1
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +29 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +55 -28
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/diagrams_model.py +9 -8
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/GuiFunctions.py +27 -15
- GridCal-5.1.22/GridCal/Gui/LoadCatalogue/SelectComponents.py +134 -0
- GridCal-5.1.22/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +106 -0
- GridCal-5.1.22/GridCal/Gui/LoadCatalogue/icons_rc.py +324 -0
- GridCal-5.1.22/GridCal/Gui/LoadCatalogue/update_gui_file.py +9 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/GridCalMain.py +5 -1
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/MainWindow.py +1673 -1393
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +25 -10
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +68 -30
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Model/objects.py +19 -6
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Results/results.py +4 -1
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +3 -3
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +39 -7
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/base_gui.py +39 -25
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/io.py +181 -82
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/simulations.py +52 -86
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/icons_rc.py +1254 -759
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +1 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/associations_model.py +19 -2
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/object_model.py +21 -1
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/pandas_model.py +20 -0
- GridCal-5.1.22/GridCal/Gui/plugins.py +221 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/profiles_model.py +21 -0
- GridCal-5.1.22/GridCal/Gui/table_view_header_wrap.py +84 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Session/file_handler.py +9 -2
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Session/results_model.py +20 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Session/server_driver.py +73 -14
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +1 -1
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/__version__.py +1 -1
- GridCal-5.1.22/GridCal/data/__init__.py +0 -0
- GridCal-5.1.22/GridCal/templates.py +87 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/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.22}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Analysis/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Analysis/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ConsoleWidget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/GeneralDialogues.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/LoadDesigner → GridCal-5.1.22/GridCal/Gui/LoadCatalogue}/__init__.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Model → GridCal-5.1.22/GridCal/Gui/LoadDesigner}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Results → GridCal-5.1.22/GridCal/Gui/Main/SubClasses/Model}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Scripting → GridCal-5.1.22/GridCal/Gui/Main/SubClasses/Results}/__init__.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Server → GridCal-5.1.22/GridCal/Gui/Main/SubClasses/Scripting}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses/Settings → GridCal-5.1.22/GridCal/Gui/Main/SubClasses/Server}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main/SubClasses → GridCal-5.1.22/GridCal/Gui/Main/SubClasses/Settings}/__init__.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Main → GridCal-5.1.22/GridCal/Gui/Main/SubClasses}/__init__.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/ProfilesInput → GridCal-5.1.22/GridCal/Gui/Main}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/object_select_window.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/RosetaExplorer → GridCal-5.1.22/GridCal/Gui/ProfilesInput}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/SigmaAnalysis → GridCal-5.1.22/GridCal/Gui/RosetaExplorer}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/SolarPowerWizard → GridCal-5.1.22/GridCal/Gui/SigmaAnalysis}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/SyncDialogue → GridCal-5.1.22/GridCal/Gui/SolarPowerWizard}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/SystemScaler → GridCal-5.1.22/GridCal/Gui/SyncDialogue}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/TowerBuilder → GridCal-5.1.22/GridCal/Gui/SystemScaler}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/TreeModelViewer → GridCal-5.1.22/GridCal/Gui/TowerBuilder}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TowerBuilder/test_.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Visualization → GridCal-5.1.22/GridCal/Gui/TreeModelViewer}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/Widgets → GridCal-5.1.22/GridCal/Gui/Visualization}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Visualization/visualization.py +0 -0
- {GridCal-5.1.20/GridCal/Gui/WindPowerWizard → GridCal-5.1.22/GridCal/Gui/Widgets}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {GridCal-5.1.20/GridCal/Gui → GridCal-5.1.22/GridCal/Gui/WindPowerWizard}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {GridCal-5.1.20/GridCal/Session → GridCal-5.1.22/GridCal/Gui}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/messages.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/plot_config.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/themes.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/update_gui_all.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Gui/update_gui_common.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/LICENSE.txt +0 -0
- {GridCal-5.1.20/GridCal/ThirdParty → GridCal-5.1.22/GridCal/Session}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Session/export_results_driver.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Session/session.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/Session/synchronization_driver.py +0 -0
- {GridCal-5.1.20/GridCal/ThirdParty/qdarktheme/_icon → GridCal-5.1.22/GridCal/ThirdParty}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {GridCal-5.1.20/GridCal/ThirdParty/qdarktheme/_template → GridCal-5.1.22/GridCal/ThirdParty/qdarktheme/_icon}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {GridCal-5.1.20/GridCal/data → GridCal-5.1.22/GridCal/ThirdParty/qdarktheme/_template}/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/__init__.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/data/cables.csv +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/data/sequence_lines.csv +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/data/transformers.csv +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/data/wires.csv +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/GridCal/update.py +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/setup.cfg +0 -0
- {GridCal-5.1.20 → GridCal-5.1.22}/setup.py +0 -0
@@ -1,17 +1,19 @@
|
|
1
|
-
#
|
1
|
+
# GridCal
|
2
|
+
# Copyright (C) 2015 - 2024 Santiago Peñate Vera
|
2
3
|
#
|
3
|
-
#
|
4
|
-
# it under the terms of the GNU General Public
|
5
|
-
# the Free Software Foundation
|
6
|
-
# (at your option) any later version.
|
4
|
+
# This program is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3 of the License, or (at your option) any later version.
|
7
8
|
#
|
8
|
-
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
9
10
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
-
#
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
12
13
|
#
|
13
|
-
# You should have received a copy of the GNU General Public License
|
14
|
-
# along with
|
14
|
+
# You should have received a copy of the GNU Lesser General Public License
|
15
|
+
# along with this program; if not, write to the Free Software Foundation,
|
16
|
+
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
15
17
|
import os
|
16
18
|
import sys
|
17
19
|
import ctypes
|
{GridCal-5.1.20 → GridCal-5.1.22}/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
|
@@ -56,12 +59,12 @@ class MapLineContainer(GenericDiagramWidget):
|
|
56
59
|
editor=editor,
|
57
60
|
draw_labels=draw_labels)
|
58
61
|
|
59
|
-
self.editor: GridMapWidget = editor #
|
62
|
+
self.editor: GridMapWidget = editor # reassign to make clear the editor type
|
60
63
|
|
61
64
|
self.nodes_list: List[NodeGraphicItem] = list()
|
62
65
|
self.segments_list: List[MapLineSegment] = list()
|
63
66
|
self.enabled = True
|
64
|
-
self.original = True
|
67
|
+
self.original = True # TODO: Que es esto?
|
65
68
|
|
66
69
|
def setWidthScale(self, val: float):
|
67
70
|
"""
|
@@ -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.22}/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.22}/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
|
"""
|
@@ -18,13 +18,15 @@ from __future__ import annotations
|
|
18
18
|
from typing import List, TYPE_CHECKING, Tuple
|
19
19
|
from PySide6 import QtWidgets
|
20
20
|
from PySide6.QtWidgets import (QApplication, QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent,
|
21
|
-
QGraphicsRectItem
|
22
|
-
from PySide6.QtCore import Qt, QPointF
|
21
|
+
QGraphicsRectItem)
|
22
|
+
from PySide6.QtCore import Qt, QPointF
|
23
23
|
from PySide6.QtGui import QBrush, QColor, QCursor
|
24
24
|
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
|
@@ -86,7 +88,9 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
86
88
|
# self.resize(r)
|
87
89
|
self.setAcceptHoverEvents(True) # Enable hover events for the item
|
88
90
|
# self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable) # Allow moving the node
|
89
|
-
self.setFlag(
|
91
|
+
self.setFlag(
|
92
|
+
self.GraphicsItemFlag.ItemIsSelectable | QGraphicsRectItem.ItemIsMovable) # Allow selecting the node
|
93
|
+
|
90
94
|
self.setCursor(QCursor(Qt.PointingHandCursor))
|
91
95
|
|
92
96
|
# Create a pen with reduced line width
|
@@ -134,25 +138,15 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
134
138
|
for i, vl_graphics in enumerate(sorted_objects):
|
135
139
|
vl_graphics.setZValue(i)
|
136
140
|
|
137
|
-
def
|
138
|
-
"""
|
139
|
-
|
140
|
-
:return:
|
141
|
-
"""
|
142
|
-
real_position = self.pos()
|
143
|
-
center_point = self.getPos()
|
144
|
-
# self.x = center_point.x() + real_position.x()
|
145
|
-
# self.y = center_point.y() + real_position.y()
|
146
|
-
self.needsUpdate = True
|
147
|
-
|
148
|
-
def updateDiagram(self):
|
141
|
+
def update_diagram(self):
|
149
142
|
"""
|
150
|
-
|
143
|
+
Updates the element position in the diagram (to save)
|
151
144
|
:return:
|
152
145
|
"""
|
153
146
|
lat, long = self.editor.to_lat_lon(self.rect().x(), self.rect().y())
|
154
147
|
|
155
|
-
|
148
|
+
self.lat = lat
|
149
|
+
self.lon = long
|
156
150
|
|
157
151
|
self.editor.update_diagram_element(device=self.api_object,
|
158
152
|
latitude=lat,
|
@@ -161,8 +155,8 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
161
155
|
|
162
156
|
def get_center_pos(self) -> QPointF:
|
163
157
|
"""
|
164
|
-
|
165
|
-
:return:
|
158
|
+
Get the center position
|
159
|
+
:return: QPointF
|
166
160
|
"""
|
167
161
|
x = self.rect().x() + self.rect().width() / 2
|
168
162
|
y = self.rect().y() + self.rect().height() / 2
|
@@ -184,17 +178,20 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
184
178
|
for vl_graphics in self.voltage_level_graphics:
|
185
179
|
vl_graphics.center_on_substation()
|
186
180
|
|
187
|
-
self.
|
181
|
+
self.update_diagram() # always update
|
188
182
|
|
189
183
|
def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
|
190
184
|
"""
|
191
185
|
Event handler for mouse press events.
|
192
186
|
"""
|
193
187
|
super().mousePressEvent(event)
|
188
|
+
# selected_items = self.editor.map.view.selected_items()
|
189
|
+
# if len(selected_items) < 2:
|
190
|
+
self.setSelected(True)
|
191
|
+
|
194
192
|
event.setAccepted(True)
|
195
193
|
self.editor.map.view.disableMove = True
|
196
194
|
|
197
|
-
print("SE mouse press")
|
198
195
|
if self.api_object is not None:
|
199
196
|
self.editor.set_editor_model(api_object=self.api_object,
|
200
197
|
dictionary_of_lists={
|
@@ -212,13 +209,14 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
212
209
|
"""
|
213
210
|
# super().mouseReleaseEvent(event)
|
214
211
|
self.editor.disableMove = True
|
215
|
-
self.
|
212
|
+
self.update_diagram() # always update
|
216
213
|
print("SE mouse release")
|
217
214
|
|
218
215
|
def hoverEnterEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
|
219
216
|
"""
|
220
217
|
Event handler for when the mouse enters the item.
|
221
218
|
"""
|
219
|
+
self.editor.map.view.inItem = True
|
222
220
|
self.setNodeColor(QColor(Qt.red), QColor(Qt.red))
|
223
221
|
self.hovered = True
|
224
222
|
QApplication.instance().setOverrideCursor(Qt.PointingHandCursor)
|
@@ -227,6 +225,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
227
225
|
"""
|
228
226
|
Event handler for when the mouse leaves the item.
|
229
227
|
"""
|
228
|
+
self.editor.map.view.inItem = False
|
230
229
|
self.hovered = False
|
231
230
|
self.setDefaultColor()
|
232
231
|
QApplication.instance().restoreOverrideCursor()
|
@@ -243,6 +242,11 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
243
242
|
icon_path="",
|
244
243
|
function_ptr=self.add_voltage_level)
|
245
244
|
|
245
|
+
add_menu_entry(menu=menu,
|
246
|
+
text="Create line from here",
|
247
|
+
icon_path="",
|
248
|
+
function_ptr=self.create_new_line)
|
249
|
+
|
246
250
|
add_menu_entry(menu=menu,
|
247
251
|
text="Move to API coordinates",
|
248
252
|
icon_path="",
|
@@ -265,6 +269,12 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
265
269
|
|
266
270
|
menu.exec_(event.screenPos())
|
267
271
|
|
272
|
+
def create_new_line(self):
|
273
|
+
"""
|
274
|
+
Create a new line in the map wizard
|
275
|
+
"""
|
276
|
+
self.editor.create_new_line_wizard()
|
277
|
+
|
268
278
|
def add_function(self):
|
269
279
|
"""
|
270
280
|
|
@@ -281,9 +291,11 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
281
291
|
|
282
292
|
for idtag, graphic_object in dev_dict.items():
|
283
293
|
substation_from_graphics = self.editor.graphics_manager.query(
|
284
|
-
elm=graphic_object.api_object.get_substation_from()
|
294
|
+
elm=graphic_object.api_object.get_substation_from()
|
295
|
+
)
|
285
296
|
substation_to_graphics = self.editor.graphics_manager.query(
|
286
|
-
elm=graphic_object.api_object.get_substation_to()
|
297
|
+
elm=graphic_object.api_object.get_substation_to()
|
298
|
+
)
|
287
299
|
lines_info.append((idtag, graphic_object, substation_from_graphics, substation_to_graphics))
|
288
300
|
|
289
301
|
# Now, iterate over the collected information
|
@@ -296,7 +308,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
296
308
|
|
297
309
|
pass
|
298
310
|
|
299
|
-
def remove_function(self):
|
311
|
+
def remove_function(self) -> None:
|
300
312
|
"""
|
301
313
|
Function to be called when Action 1 is selected.
|
302
314
|
"""
|
@@ -333,7 +345,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
333
345
|
inpt = InputNumberDialogue(
|
334
346
|
min_value=1.0,
|
335
347
|
max_value=100000.0,
|
336
|
-
default_value=
|
348
|
+
default_value=self.editor.diagram.default_bus_voltage,
|
337
349
|
title="Add voltage level",
|
338
350
|
text="Voltage (kV)",
|
339
351
|
)
|
@@ -346,7 +358,14 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
346
358
|
Vnom=kv,
|
347
359
|
substation=self.api_object)
|
348
360
|
|
361
|
+
bus = Bus(name=f"Bus {self.api_object.name}",
|
362
|
+
Vnom=kv,
|
363
|
+
substation=self.api_object,
|
364
|
+
voltage_level=vl)
|
365
|
+
|
349
366
|
self.editor.circuit.add_voltage_level(vl)
|
367
|
+
self.editor.circuit.add_bus(obj=bus)
|
368
|
+
|
350
369
|
self.editor.add_api_voltage_level(substation_graphics=self,
|
351
370
|
api_object=vl)
|
352
371
|
|
@@ -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,11 @@ 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)
|
25
|
+
|
22
26
|
|
23
27
|
# # set how old disk-cache tiles can be before we re-request them from the
|
24
28
|
# # server. this is the number of days old a tile is before we re-request.
|