GridCal 5.1.39__tar.gz → 5.1.41__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.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +24 -6
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +75 -14
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +25 -3
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +7 -3
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +2 -1
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Model/time_events.py +19 -12
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/profile_dialogue.py +71 -47
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/object_model.py +7 -1
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Session/server_driver.py +13 -62
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/__version__.py +1 -1
- {GridCal-5.1.39 → GridCal-5.1.41}/PKG-INFO +1 -1
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ExecuteGridCal.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Analysis/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Analysis/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/MainWindow.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/io.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/object_select_window.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TowerBuilder/test_.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Visualization/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Visualization/visualization.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Widgets/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/associations_model.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/console_widget.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/general_dialogues.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/gui_functions.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/messages.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/pandas_model.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/plot_config.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/profiles_model.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/results_model.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/themes.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/update_gui_all.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/update_gui_common.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/wrappable_table_model.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/LICENSE.txt +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Session/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Session/export_results_driver.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Session/file_handler.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Session/session.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Session/synchronization_driver.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/data/__init__.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/data/cables.csv +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/data/sequence_lines.csv +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/data/transformers.csv +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/data/wires.csv +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/plugins.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/templates.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/GridCal/update.py +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/setup.cfg +0 -0
- {GridCal-5.1.39 → GridCal-5.1.41}/setup.py +0 -0
{GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py
RENAMED
@@ -72,9 +72,9 @@ class MapLineContainer(GenericDiagramWidget):
|
|
72
72
|
:param val:
|
73
73
|
"""
|
74
74
|
for segment in self.segments_list:
|
75
|
-
pen = segment.pen() # get the current pen
|
76
|
-
pen.setWidthF(val * segment.width) # Set the fractional thickness of the line
|
77
|
-
segment.
|
75
|
+
# pen = segment.pen() # get the current pen
|
76
|
+
# pen.setWidthF(val * segment.width) # Set the fractional thickness of the line
|
77
|
+
segment.set_width(val * segment.width) # Assign the pen to the line item
|
78
78
|
|
79
79
|
def clean_segments(self) -> None:
|
80
80
|
"""
|
@@ -132,10 +132,8 @@ class MapLineContainer(GenericDiagramWidget):
|
|
132
132
|
:return:
|
133
133
|
"""
|
134
134
|
for segment in self.segments_list:
|
135
|
-
segment.setPen(QPen(color, w, style))
|
136
135
|
segment.setToolTip(tool_tip)
|
137
|
-
|
138
|
-
# segment.setBrush(color)
|
136
|
+
segment.set_colour(color=color, w=w, style=style)
|
139
137
|
|
140
138
|
def update_connectors(self) -> None:
|
141
139
|
"""
|
@@ -463,3 +461,23 @@ class MapLineContainer(GenericDiagramWidget):
|
|
463
461
|
|
464
462
|
for line in self.segments_list:
|
465
463
|
line.set_enable(val=False)
|
464
|
+
|
465
|
+
def set_arrows_with_power(self, Sf: complex, St: complex) -> None:
|
466
|
+
"""
|
467
|
+
|
468
|
+
:param Sf:
|
469
|
+
:param St:
|
470
|
+
:return:
|
471
|
+
"""
|
472
|
+
for segment in self.segments_list:
|
473
|
+
segment.set_arrows_with_power(Sf=Sf, St=St)
|
474
|
+
|
475
|
+
def set_arrows_with_hvdc_power(self, Pf: float, Pt: float) -> None:
|
476
|
+
"""
|
477
|
+
|
478
|
+
:param Pf:
|
479
|
+
:param Pt:
|
480
|
+
:return:
|
481
|
+
"""
|
482
|
+
for segment in self.segments_list:
|
483
|
+
segment.set_arrows_with_hvdc_power(Pf=Pf, Pt=Pt)
|
{GridCal-5.1.39 → GridCal-5.1.41}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py
RENAMED
@@ -21,6 +21,7 @@ from PySide6.QtGui import QPen, QColor, QCursor
|
|
21
21
|
from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent
|
22
22
|
from PySide6.QtWidgets import QGraphicsLineItem, QGraphicsSceneMouseEvent
|
23
23
|
|
24
|
+
from GridCal.Gui.Diagrams.SchematicWidget.Branches.line_graphics_template import ArrowHead
|
24
25
|
from GridCal.Gui.gui_functions import add_menu_entry
|
25
26
|
from GridCal.Gui.messages import yes_no_question
|
26
27
|
from GridCal.Gui.Diagrams.generic_graphics import ACTIVE, DEACTIVATED, OTHER
|
@@ -59,6 +60,19 @@ class MapLineSegment(QGraphicsLineItem):
|
|
59
60
|
self.pos1: QPointF = self.first.get_center_pos()
|
60
61
|
self.pos2: QPointF = self.second.get_center_pos()
|
61
62
|
|
63
|
+
# arrows
|
64
|
+
self.view_arrows = True
|
65
|
+
self._arrow_size = self.width * 1.5
|
66
|
+
self.arrow_p_from = ArrowHead(parent=self, arrow_size=self._arrow_size, position=0.2, under=False,
|
67
|
+
text_scale=0.01, show_text=False)
|
68
|
+
self.arrow_q_from = ArrowHead(parent=self, arrow_size=self._arrow_size, position=0.2, under=True,
|
69
|
+
text_scale=0.01, show_text=False)
|
70
|
+
self.arrow_p_to = ArrowHead(parent=self, arrow_size=self._arrow_size, position=0.8, under=False,
|
71
|
+
text_scale=0.01, show_text=False)
|
72
|
+
self.arrow_q_to = ArrowHead(parent=self, arrow_size=self._arrow_size, position=0.8, under=True,
|
73
|
+
text_scale=0.01, show_text=False)
|
74
|
+
|
75
|
+
# set callbacks
|
62
76
|
self.first.add_position_change_callback(self.set_from_side_coordinates)
|
63
77
|
self.second.add_position_change_callback(self.set_to_side_coordinates)
|
64
78
|
|
@@ -68,7 +82,7 @@ class MapLineSegment(QGraphicsLineItem):
|
|
68
82
|
self.setZValue(0)
|
69
83
|
|
70
84
|
self.setFlag(self.GraphicsItemFlag.ItemIsSelectable, True)
|
71
|
-
self.setCursor(QCursor(Qt.PointingHandCursor))
|
85
|
+
self.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
|
72
86
|
|
73
87
|
@property
|
74
88
|
def api_object(self) -> BRANCH_TYPES:
|
@@ -86,6 +100,21 @@ class MapLineSegment(QGraphicsLineItem):
|
|
86
100
|
"""
|
87
101
|
return self.container.editor
|
88
102
|
|
103
|
+
def set_width(self, width: float):
|
104
|
+
"""
|
105
|
+
|
106
|
+
:param width:
|
107
|
+
:return:
|
108
|
+
"""
|
109
|
+
pen = self.pen()
|
110
|
+
pen.setWidthF(width)
|
111
|
+
self.setPen(pen)
|
112
|
+
|
113
|
+
self.arrow_p_from.label.setScale(width)
|
114
|
+
self.arrow_q_from.label.setScale(width)
|
115
|
+
self.arrow_p_to.label.setScale(width)
|
116
|
+
self.arrow_q_to.label.setScale(width)
|
117
|
+
|
89
118
|
def set_colour(self, color: QColor, w: float, style: Qt.PenStyle):
|
90
119
|
"""
|
91
120
|
Set color and style
|
@@ -95,10 +124,14 @@ class MapLineSegment(QGraphicsLineItem):
|
|
95
124
|
:return:
|
96
125
|
"""
|
97
126
|
|
98
|
-
pen = QPen(color, w, style, Qt.RoundCap, Qt.RoundJoin)
|
127
|
+
pen = QPen(color, w, style, Qt.PenCapStyle.RoundCap, Qt.PenJoinStyle.RoundJoin)
|
99
128
|
pen.setWidthF(w)
|
100
129
|
|
101
130
|
self.setPen(pen)
|
131
|
+
self.arrow_p_from.set_colour(color, w, style)
|
132
|
+
self.arrow_q_from.set_colour(color, w, style)
|
133
|
+
self.arrow_p_to.set_colour(color, w, style)
|
134
|
+
self.arrow_q_to.set_colour(color, w, style)
|
102
135
|
|
103
136
|
def set_from_side_coordinates(self, x: float, y: float):
|
104
137
|
"""
|
@@ -125,13 +158,15 @@ class MapLineSegment(QGraphicsLineItem):
|
|
125
158
|
Update the endings of this segment
|
126
159
|
"""
|
127
160
|
self.setLine(QLineF(self.pos1, self.pos2))
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
161
|
+
|
162
|
+
if self.api_object is not None:
|
163
|
+
|
164
|
+
# arrows
|
165
|
+
if self.view_arrows:
|
166
|
+
self.arrow_p_from.redraw()
|
167
|
+
self.arrow_q_from.redraw()
|
168
|
+
self.arrow_p_to.redraw()
|
169
|
+
self.arrow_q_to.redraw()
|
135
170
|
|
136
171
|
def end_update(self) -> None:
|
137
172
|
"""
|
@@ -158,11 +193,6 @@ class MapLineSegment(QGraphicsLineItem):
|
|
158
193
|
"""
|
159
194
|
menu = QMenu()
|
160
195
|
|
161
|
-
# add_menu_entry(menu=menu,
|
162
|
-
# text="Remove",
|
163
|
-
# icon_path="",
|
164
|
-
# function_ptr=self.RemoveFunction)
|
165
|
-
|
166
196
|
menu.addSection("Line")
|
167
197
|
|
168
198
|
add_menu_entry(menu=menu,
|
@@ -360,3 +390,34 @@ class MapLineSegment(QGraphicsLineItem):
|
|
360
390
|
if ok:
|
361
391
|
self.editor.circuit.delete_branch(obj=self.api_object)
|
362
392
|
self.editor.delete_diagram_element(device=self.api_object)
|
393
|
+
|
394
|
+
def set_arrows_with_power(self, Sf: complex, St: complex) -> None:
|
395
|
+
"""
|
396
|
+
Set the arrow directions
|
397
|
+
:param Sf: Complex power from
|
398
|
+
:param St: Complex power to
|
399
|
+
"""
|
400
|
+
|
401
|
+
if Sf is not None:
|
402
|
+
if St is None:
|
403
|
+
St = -Sf
|
404
|
+
|
405
|
+
Pf = Sf.real
|
406
|
+
Qf = Sf.imag
|
407
|
+
Pt = St.real
|
408
|
+
Qt_ = St.imag
|
409
|
+
self.arrow_p_from.set_value(Pf, True, Pf < 0, name="Pf", units="MW", draw_label=self.draw_labels)
|
410
|
+
self.arrow_q_from.set_value(Qf, True, Qf < 0, name="Qf", units="MVAr", draw_label=self.draw_labels)
|
411
|
+
self.arrow_p_to.set_value(Pt, True, Pt > 0, name="Pt", units="MW", draw_label=self.draw_labels)
|
412
|
+
self.arrow_q_to.set_value(Qt_, True, Qt_ > 0, name="Qt", units="MVAr", draw_label=self.draw_labels)
|
413
|
+
|
414
|
+
def set_arrows_with_hvdc_power(self, Pf: float, Pt: float) -> None:
|
415
|
+
"""
|
416
|
+
Set the arrow directions
|
417
|
+
:param Pf: Complex power from
|
418
|
+
:param Pt: Complex power to
|
419
|
+
"""
|
420
|
+
self.arrow_p_from.set_value(Pf, True, Pf < 0, name="Pf", units="MW", draw_label=self.draw_labels)
|
421
|
+
self.arrow_q_from.set_value(Pf, True, Pf < 0, name="Pf", units="MW", draw_label=self.draw_labels)
|
422
|
+
self.arrow_p_to.set_value(Pt, True, Pt > 0, name="Pt", units="MW", draw_label=self.draw_labels)
|
423
|
+
self.arrow_q_to.set_value(Pt, True, Pt > 0, name="Pt", units="MW", draw_label=self.draw_labels)
|
@@ -245,7 +245,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
245
245
|
position_callback=self.position_callback)
|
246
246
|
|
247
247
|
# Any representation on the map must be done after this Goto Function
|
248
|
-
self.map.GotoLevelAndPosition(level=6, longitude=
|
248
|
+
self.map.GotoLevelAndPosition(level=6, longitude=longitude, latitude=latitude)
|
249
249
|
|
250
250
|
self.map.startLev = 6
|
251
251
|
self.map.startLat = 0
|
@@ -1059,7 +1059,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1059
1059
|
a *= 255
|
1060
1060
|
|
1061
1061
|
color = QColor(r, g, b, a)
|
1062
|
-
style = Qt.SolidLine
|
1062
|
+
style = Qt.PenStyle.SolidLine
|
1063
1063
|
if use_flow_based_width:
|
1064
1064
|
weight = int(
|
1065
1065
|
np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1))
|
@@ -1068,6 +1068,15 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1068
1068
|
|
1069
1069
|
graphic_object.set_colour(color=color, w=weight, style=style, tool_tip=tooltip)
|
1070
1070
|
|
1071
|
+
if hasattr(graphic_object, 'set_arrows_with_power'):
|
1072
|
+
graphic_object.set_arrows_with_power(
|
1073
|
+
Sf=Sf[i] if Sf is not None else None,
|
1074
|
+
St=St[i] if St is not None else None
|
1075
|
+
)
|
1076
|
+
else:
|
1077
|
+
# the graphic object is None
|
1078
|
+
pass
|
1079
|
+
|
1071
1080
|
# try colouring the HVDC lines
|
1072
1081
|
if len(hvdc_lines) > 0:
|
1073
1082
|
|
@@ -1110,13 +1119,26 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1110
1119
|
a *= 255
|
1111
1120
|
|
1112
1121
|
color = QColor(r, g, b, a)
|
1113
|
-
style = Qt.SolidLine
|
1122
|
+
style = Qt.PenStyle.SolidLine
|
1114
1123
|
if use_flow_based_width:
|
1115
1124
|
weight = int(
|
1116
1125
|
np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1))
|
1117
1126
|
else:
|
1118
1127
|
weight = 0.5
|
1119
1128
|
|
1129
|
+
tooltip = str(i) + ': ' + graphic_object.api_object.name
|
1130
|
+
tooltip += '\n' + loading_label + ': ' + "{:10.4f}".format(
|
1131
|
+
abs(hvdc_loading[i]) * 100) + ' [%]'
|
1132
|
+
|
1133
|
+
tooltip += '\nPower (from):\t' + "{:10.4f}".format(hvdc_Pf[i]) + ' [MW]'
|
1134
|
+
|
1135
|
+
if hvdc_losses is not None:
|
1136
|
+
tooltip += '\nPower (to):\t' + "{:10.4f}".format(hvdc_Pt[i]) + ' [MW]'
|
1137
|
+
tooltip += '\nLosses: \t\t' + "{:10.4f}".format(hvdc_losses[i]) + ' [MW]'
|
1138
|
+
graphic_object.set_arrows_with_hvdc_power(Pf=hvdc_Pf[i], Pt=hvdc_Pt[i])
|
1139
|
+
else:
|
1140
|
+
graphic_object.set_arrows_with_hvdc_power(Pf=hvdc_Pf[i], Pt=-hvdc_Pf[i])
|
1141
|
+
|
1120
1142
|
graphic_object.set_colour(color=color, w=weight, style=style, tool_tip=tooltip)
|
1121
1143
|
|
1122
1144
|
def get_image(self, transparent: bool = False) -> Tuple[QImage, int, int]:
|
@@ -329,12 +329,13 @@ class ArrowHead(QGraphicsPolygonItem):
|
|
329
329
|
|
330
330
|
def __init__(self,
|
331
331
|
parent: QGraphicsLineItem,
|
332
|
-
arrow_size:
|
332
|
+
arrow_size: float,
|
333
333
|
position: float = 0.9,
|
334
334
|
under: bool = False,
|
335
335
|
backwards: bool = False,
|
336
336
|
separation: int = 5,
|
337
|
-
show_text: bool = True
|
337
|
+
show_text: bool = True,
|
338
|
+
text_scale: float = 1.0):
|
338
339
|
"""
|
339
340
|
Constructor
|
340
341
|
:param parent: Parent line
|
@@ -344,11 +345,12 @@ class ArrowHead(QGraphicsPolygonItem):
|
|
344
345
|
:param backwards: Is it backwards?
|
345
346
|
:param separation: Separation
|
346
347
|
:param show_text: Show the label?
|
348
|
+
:param text_scale: Text scale
|
347
349
|
"""
|
348
350
|
QGraphicsPolygonItem.__init__(self, parent=parent)
|
349
351
|
|
350
352
|
self.parent: QGraphicsLineItem = parent
|
351
|
-
self.arrow_size:
|
353
|
+
self.arrow_size: float = arrow_size
|
352
354
|
self.position: float = position
|
353
355
|
self.under: bool = under
|
354
356
|
self.backwards: float = backwards
|
@@ -356,6 +358,7 @@ class ArrowHead(QGraphicsPolygonItem):
|
|
356
358
|
|
357
359
|
self.label = QGraphicsTextItem(self)
|
358
360
|
self.label.setPlainText("")
|
361
|
+
# self.label.setScale(text_scale)
|
359
362
|
self.show_text = show_text
|
360
363
|
|
361
364
|
self.w = arrow_size
|
@@ -373,6 +376,7 @@ class ArrowHead(QGraphicsPolygonItem):
|
|
373
376
|
"""
|
374
377
|
self.setBrush(color)
|
375
378
|
self.label.setDefaultTextColor(color)
|
379
|
+
# self.label.setScale(w)
|
376
380
|
|
377
381
|
def set_value(self, value: float, redraw=True, backwards=False, name="", units="", format_str="{:10.2f}",
|
378
382
|
draw_label: bool = True, visibility_filter_value=1e-4):
|
@@ -3469,7 +3469,8 @@ class SchematicWidget(BaseDiagramWidget):
|
|
3469
3469
|
if hasattr(graphic_object, 'set_arrows_with_power'):
|
3470
3470
|
graphic_object.set_arrows_with_power(
|
3471
3471
|
Sf=Sf[i] if Sf is not None else None,
|
3472
|
-
St=St[i] if St is not None else None
|
3472
|
+
St=St[i] if St is not None else None
|
3473
|
+
)
|
3473
3474
|
else:
|
3474
3475
|
w = graphic_object.pen_width
|
3475
3476
|
style = Qt.PenStyle.DashLine
|
@@ -27,7 +27,7 @@ from GridCal.Gui.general_dialogues import NewProfilesStructureDialogue, TimeReIn
|
|
27
27
|
from GridCal.Gui.messages import yes_no_question, warning_msg, info_msg
|
28
28
|
from GridCal.Gui.Main.SubClasses.Model.objects import ObjectsTableMain
|
29
29
|
from GridCal.Gui.ProfilesInput.models_dialogue import ModelsInputGUI
|
30
|
-
from GridCal.Gui.ProfilesInput.profile_dialogue import ProfileInputGUI
|
30
|
+
from GridCal.Gui.ProfilesInput.profile_dialogue import ProfileInputGUI, GeneratorsProfileOptionsDialogue
|
31
31
|
from GridCal.Gui.profiles_model import ProfilesModel
|
32
32
|
|
33
33
|
|
@@ -85,7 +85,6 @@ class TimeEventsMain(ObjectsTableMain):
|
|
85
85
|
"""
|
86
86
|
dlg = NewProfilesStructureDialogue()
|
87
87
|
if dlg.exec_():
|
88
|
-
|
89
88
|
steps, step_length, step_unit, time_base = dlg.get_values()
|
90
89
|
|
91
90
|
self.ui.profiles_tableView.setModel(None)
|
@@ -180,18 +179,26 @@ class TimeEventsMain(ObjectsTableMain):
|
|
180
179
|
if len(objects) > 0:
|
181
180
|
if magnitude == 'P':
|
182
181
|
if objects[0].device_type == DeviceType.GeneratorDevice:
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
if
|
182
|
+
|
183
|
+
dlg = GeneratorsProfileOptionsDialogue()
|
184
|
+
dlg.exec()
|
185
|
+
|
186
|
+
if dlg.correct_active_profile.isChecked():
|
188
187
|
self.fix_generators_active_based_on_the_power(ask_before=False)
|
188
|
+
|
189
|
+
if dlg.set_non_dispatchable.isChecked():
|
190
|
+
for i, elm in enumerate(objects):
|
191
|
+
if self.profile_input_dialogue.has_profile(i):
|
192
|
+
# if there was a profile, we want the generator not dispatchable
|
193
|
+
elm.enabled_dispatch = False
|
194
|
+
else:
|
195
|
+
elm.enabled_dispatch = True
|
196
|
+
|
189
197
|
elif objects[0].device_type == DeviceType.LoadDevice:
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
if ok:
|
198
|
+
ok1 = yes_no_question("Do you want to correct the loads active profile "
|
199
|
+
"based on the active power profile?",
|
200
|
+
"Match")
|
201
|
+
if ok1:
|
195
202
|
self.fix_loads_active_based_on_the_power(ask_before=False)
|
196
203
|
|
197
204
|
else:
|
@@ -19,14 +19,13 @@ from __future__ import annotations
|
|
19
19
|
import os
|
20
20
|
import string
|
21
21
|
import sys
|
22
|
-
from typing import
|
22
|
+
from typing import Tuple, List
|
23
23
|
from random import randint
|
24
24
|
from enum import Enum
|
25
25
|
from difflib import SequenceMatcher
|
26
26
|
import numpy as np
|
27
27
|
import pandas as pd
|
28
28
|
from PySide6 import QtWidgets, QtCore
|
29
|
-
from typing import List
|
30
29
|
from GridCal.Gui.pandas_model import PandasModel
|
31
30
|
from GridCal.Gui.gui_functions import get_list_model
|
32
31
|
from GridCal.Gui.ProfilesInput.profiles_from_data_gui import Ui_Dialog
|
@@ -34,6 +33,7 @@ from GridCal.Gui.ProfilesInput.excel_dialog import ExcelDialog
|
|
34
33
|
from GridCal.Gui.messages import error_msg
|
35
34
|
from GridCalEngine.Devices.types import ALL_DEV_TYPES
|
36
35
|
from GridCalEngine.Devices.Parents.editable_device import uuid2idtag
|
36
|
+
from GridCalEngine.basic_structures import Mat, BoolVec
|
37
37
|
|
38
38
|
|
39
39
|
class MultiplierType(Enum):
|
@@ -127,16 +127,16 @@ class ProfileAssociations(QtCore.QAbstractTableModel):
|
|
127
127
|
"""
|
128
128
|
self.__values.append(val)
|
129
129
|
|
130
|
-
def set_profile_at(self, idx,
|
130
|
+
def set_profile_at(self, idx: int, profile_name: str) -> None:
|
131
131
|
"""
|
132
132
|
|
133
133
|
:param idx:
|
134
|
-
:param
|
134
|
+
:param profile_name:
|
135
135
|
:return:
|
136
136
|
"""
|
137
|
-
self.__values[idx].profile_name =
|
137
|
+
self.__values[idx].profile_name = profile_name
|
138
138
|
|
139
|
-
def set_scale_at(self, idx, value):
|
139
|
+
def set_scale_at(self, idx: int, value: float) -> None:
|
140
140
|
"""
|
141
141
|
|
142
142
|
:param idx:
|
@@ -145,7 +145,7 @@ class ProfileAssociations(QtCore.QAbstractTableModel):
|
|
145
145
|
"""
|
146
146
|
self.__values[idx].scale = value
|
147
147
|
|
148
|
-
def set_multiplier_at(self, idx, value):
|
148
|
+
def set_multiplier_at(self, idx: int, value: float) -> None:
|
149
149
|
"""
|
150
150
|
|
151
151
|
:param idx:
|
@@ -154,7 +154,7 @@ class ProfileAssociations(QtCore.QAbstractTableModel):
|
|
154
154
|
"""
|
155
155
|
self.__values[idx].multiplier = value
|
156
156
|
|
157
|
-
def get_profile_at(self, idx):
|
157
|
+
def get_profile_at(self, idx: int) -> str:
|
158
158
|
"""
|
159
159
|
|
160
160
|
:param idx:
|
@@ -162,7 +162,7 @@ class ProfileAssociations(QtCore.QAbstractTableModel):
|
|
162
162
|
"""
|
163
163
|
return self.__values[idx].profile_name
|
164
164
|
|
165
|
-
def get_scale_at(self, idx):
|
165
|
+
def get_scale_at(self, idx: int) -> float:
|
166
166
|
"""
|
167
167
|
|
168
168
|
:param idx:
|
@@ -170,7 +170,7 @@ class ProfileAssociations(QtCore.QAbstractTableModel):
|
|
170
170
|
"""
|
171
171
|
return self.__values[idx].scale
|
172
172
|
|
173
|
-
def get_multiplier_at(self, idx):
|
173
|
+
def get_multiplier_at(self, idx: int) -> float:
|
174
174
|
"""
|
175
175
|
|
176
176
|
:param idx:
|
@@ -188,7 +188,7 @@ class ProfileAssociations(QtCore.QAbstractTableModel):
|
|
188
188
|
self.__values[idx].scale = 1
|
189
189
|
self.__values[idx].multiplier = 1
|
190
190
|
|
191
|
-
def rowCount(self, parent=None):
|
191
|
+
def rowCount(self, parent: QtCore.QModelIndex = None) -> int:
|
192
192
|
"""
|
193
193
|
|
194
194
|
:param parent:
|
@@ -292,20 +292,36 @@ def check_similarity(name_to_search: str,
|
|
292
292
|
return None
|
293
293
|
|
294
294
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
#
|
307
|
-
|
308
|
-
|
295
|
+
class GeneratorsProfileOptionsDialogue(QtWidgets.QDialog):
|
296
|
+
"""
|
297
|
+
Dialogue to show after profile import
|
298
|
+
"""
|
299
|
+
|
300
|
+
def __init__(self):
|
301
|
+
super().__init__()
|
302
|
+
|
303
|
+
self.setWindowTitle("Generator active power options")
|
304
|
+
self.setModal(True) # Make the dialog modal
|
305
|
+
|
306
|
+
# Create checkboxes
|
307
|
+
self.correct_active_profile = QtWidgets.QCheckBox("Correct active profile")
|
308
|
+
self.correct_active_profile.setToolTip("The generators active will be set to False if the power is zero")
|
309
|
+
|
310
|
+
self.set_non_dispatchable = QtWidgets.QCheckBox("Set to non-dispatchable")
|
311
|
+
self.set_non_dispatchable.setToolTip("Teh generators matched will be set set to non dispatchable. "
|
312
|
+
"This is usefull to specify renewable generation")
|
313
|
+
|
314
|
+
# Create layout and add checkboxes
|
315
|
+
layout = QtWidgets.QVBoxLayout()
|
316
|
+
layout.addWidget(self.correct_active_profile)
|
317
|
+
layout.addWidget(self.set_non_dispatchable)
|
318
|
+
|
319
|
+
# Create OK button to close the dialog
|
320
|
+
ok_button = QtWidgets.QPushButton("OK")
|
321
|
+
ok_button.clicked.connect(self.accept) # Close modal on button click
|
322
|
+
layout.addWidget(ok_button)
|
323
|
+
|
324
|
+
self.setLayout(layout)
|
309
325
|
|
310
326
|
|
311
327
|
class ProfileInputGUI(QtWidgets.QDialog):
|
@@ -332,15 +348,15 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
332
348
|
self.ui.setupUi(self)
|
333
349
|
self.setWindowTitle('Profiles import dialogue')
|
334
350
|
|
335
|
-
self.project_directory = None
|
351
|
+
self.project_directory: str | None = None
|
336
352
|
|
337
353
|
self.magnitudes = magnitudes
|
338
354
|
|
339
355
|
# results
|
340
|
-
self.data = None
|
341
|
-
self.time = None
|
342
|
-
self.zeroed = None
|
343
|
-
self.normalized = False
|
356
|
+
self.data: Mat | None = None
|
357
|
+
self.time: pd.DatetimeIndex | None = None
|
358
|
+
self.zeroed: BoolVec = None # array to know which profiles are only zeros
|
359
|
+
self.normalized: bool = False
|
344
360
|
|
345
361
|
# units
|
346
362
|
self.units = dict()
|
@@ -394,13 +410,13 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
394
410
|
}
|
395
411
|
self.ui.nameTransformationComboBox.setModel(get_list_model(list(self.transformations.keys())))
|
396
412
|
|
397
|
-
self.original_data_frame = None
|
413
|
+
self.original_data_frame: pd.DataFrame | None = None
|
398
414
|
|
399
415
|
self.ui.autolink_slider.setValue(100) # Set slider to max value
|
400
416
|
|
401
417
|
self.profile_names = list()
|
402
418
|
|
403
|
-
self.excel_dialogue:
|
419
|
+
self.excel_dialogue: ExcelDialog | None = None
|
404
420
|
|
405
421
|
# click
|
406
422
|
self.ui.open_button.clicked.connect(self.import_profile)
|
@@ -418,7 +434,7 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
418
434
|
self.ui.assignation_table.doubleClicked.connect(self.assignation_table_double_click)
|
419
435
|
self.ui.tableView.doubleClicked.connect(self.print_profile)
|
420
436
|
|
421
|
-
def get_multiplier(self):
|
437
|
+
def get_multiplier(self) -> float:
|
422
438
|
"""
|
423
439
|
Gets the necessary multiplier to pass the profile units to Mega
|
424
440
|
Remember that the power units in GridCal are the MVA
|
@@ -426,7 +442,7 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
426
442
|
unit = self.ui.units_combobox.currentText()
|
427
443
|
return self.units[unit] / self.units['M']
|
428
444
|
|
429
|
-
def import_profile(self):
|
445
|
+
def import_profile(self) -> None:
|
430
446
|
"""
|
431
447
|
Select a file to be loaded
|
432
448
|
"""
|
@@ -525,7 +541,7 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
525
541
|
self.original_data_frame[col_name].plot(ax=self.ui.plotwidget.canvas.ax)
|
526
542
|
self.ui.plotwidget.canvas.draw()
|
527
543
|
|
528
|
-
def display_associations(self):
|
544
|
+
def display_associations(self) -> None:
|
529
545
|
"""
|
530
546
|
|
531
547
|
@return:
|
@@ -533,7 +549,7 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
533
549
|
self.ui.assignation_table.setModel(self.associations)
|
534
550
|
self.ui.assignation_table.repaint()
|
535
551
|
|
536
|
-
def display_profiles(self):
|
552
|
+
def display_profiles(self) -> None:
|
537
553
|
"""
|
538
554
|
|
539
555
|
:return:
|
@@ -556,7 +572,7 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
556
572
|
self.original_data_frame[name].plot(ax=self.ui.plotwidget.canvas.ax)
|
557
573
|
self.ui.plotwidget.canvas.draw()
|
558
574
|
|
559
|
-
def make_association(self, source_idx, obj_idx, scale=
|
575
|
+
def make_association(self, source_idx: int, obj_idx: int, scale: float = 1.0, mult: float = 1.0) -> None:
|
560
576
|
"""
|
561
577
|
Makes an association in the associations table
|
562
578
|
"""
|
@@ -579,7 +595,7 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
579
595
|
idx_o = self.ui.assignation_table.selectedIndexes()[0].row()
|
580
596
|
col = self.ui.assignation_table.selectedIndexes()[0].column()
|
581
597
|
|
582
|
-
self.make_association(idx_s, idx_o, mult=
|
598
|
+
self.make_association(idx_s, idx_o, mult=1.0)
|
583
599
|
|
584
600
|
def set_multiplier(self, tpe):
|
585
601
|
"""
|
@@ -623,7 +639,7 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
623
639
|
# assign the string with the closest match profile
|
624
640
|
if idx is not None:
|
625
641
|
# make the association
|
626
|
-
self.make_association(idx, idx_o, mult)
|
642
|
+
self.make_association(idx, idx_o, 1.0, mult)
|
627
643
|
|
628
644
|
self.display_associations()
|
629
645
|
|
@@ -705,7 +721,7 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
705
721
|
|
706
722
|
self.display_associations()
|
707
723
|
|
708
|
-
def
|
724
|
+
def get_profiles_data(self) -> Tuple[Mat | None, pd.DatetimeIndex | None, BoolVec | None]:
|
709
725
|
"""
|
710
726
|
Return ths assigned profiles
|
711
727
|
@return:
|
@@ -795,13 +811,21 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
795
811
|
self.original_data_frame.columns = self.profile_names
|
796
812
|
self.display_profiles()
|
797
813
|
|
798
|
-
def
|
814
|
+
def has_profile(self, i: int) -> bool:
|
815
|
+
"""
|
816
|
+
Return if an object index has an associated profile
|
817
|
+
:param i:
|
818
|
+
:return:
|
819
|
+
"""
|
820
|
+
return self.associations.get_profile_at(i) != ""
|
821
|
+
|
822
|
+
def do_it(self) -> None:
|
799
823
|
"""
|
800
824
|
Close. The data has to be queried later to the object by the parent by calling get_association_data
|
801
825
|
"""
|
802
826
|
|
803
827
|
# Generate profiles
|
804
|
-
self.data, self.time, self.zeroed = self.
|
828
|
+
self.data, self.time, self.zeroed = self.get_profiles_data()
|
805
829
|
self.normalized = self.ui.normalized_checkBox.isChecked()
|
806
830
|
|
807
831
|
if self.normalized:
|
@@ -814,13 +838,13 @@ class ProfileInputGUI(QtWidgets.QDialog):
|
|
814
838
|
self.close()
|
815
839
|
|
816
840
|
|
817
|
-
|
818
|
-
|
819
|
-
self
|
820
|
-
|
841
|
+
if __name__ == "__main__":
|
842
|
+
class TestObj:
|
843
|
+
def __init__(self, name, code):
|
844
|
+
self.name = name
|
845
|
+
self.code = code
|
821
846
|
|
822
847
|
|
823
|
-
if __name__ == "__main__":
|
824
848
|
app = QtWidgets.QApplication(sys.argv)
|
825
849
|
window = ProfileInputGUI(list_of_objects=[TestObj('Test object', 'code')] * 10)
|
826
850
|
window.resize(1.61 * 700.0, 600.0) # golden ratio
|
@@ -270,7 +270,13 @@ class ObjectsModel(WrappableTableModel):
|
|
270
270
|
if role == QtCore.Qt.ItemDataRole.DisplayRole:
|
271
271
|
return str(self.data_with_type(index))
|
272
272
|
elif role == QtCore.Qt.ItemDataRole.BackgroundRole:
|
273
|
-
|
273
|
+
|
274
|
+
if self.transposed:
|
275
|
+
attr_idx = index.row()
|
276
|
+
else:
|
277
|
+
attr_idx = index.column()
|
278
|
+
|
279
|
+
if 'color' in self.attributes[attr_idx]:
|
274
280
|
return QtGui.QColor(str(self.data_with_type(index)))
|
275
281
|
|
276
282
|
return None
|