Source code for spinetoolbox.spine_db_editor.widgets.item_metadata_editor
######################################################################################################################
# Copyright (C) 2017-2022 Spine project consortium
# Copyright Spine Toolbox contributors
# This file is part of Spine Toolbox.
# Spine Toolbox is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General
# Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option)
# any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
# Public License for more details. You should have received a copy of the GNU Lesser General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
######################################################################################################################
"""Contains machinery to deal with item metadata editor."""
from PySide6.QtCore import Slot, QModelIndex
from ..mvcmodels.entity_tree_item import EntityItem
from ..mvcmodels.item_metadata_table_model import ItemMetadataTableModel
[docs]class ItemMetadataEditor:
"""A DB editor helper class that manages entity and parameter value metadata editor."""
def __init__(self, item_metadata_table_view, db_editor, metadata_editor, db_mngr):
"""
Args:
item_metadata_table_view (ItemMetadataTableView): editor's view
db_editor (SpineDBEditor): database editor
metadata_editor (MetadataEditor): metadata editor
db_mngr (SpineDBManager): database manager
"""
self._db_mngr = db_mngr
self._metadata_editor = metadata_editor
self._item_metadata_table_view = item_metadata_table_view
self._item_metadata_table_model = ItemMetadataTableModel(db_mngr, db_editor.db_maps, db_editor)
self._item_metadata_table_view.set_models(self._item_metadata_table_model, metadata_editor.metadata_model())
self._item_metadata_table_view.setModel(self._item_metadata_table_model)
self._item_metadata_table_view.connect_spine_db_editor(db_editor)
[docs] def connect_signals(self, ui):
"""Connects user interface signals.
Args:
ui (Ui_MainWindow): DB editor's user interface
"""
ui.treeView_entity.selectionModel().currentChanged.connect(self._reload_entity_metadata)
ui.tableView_parameter_value.selectionModel().currentChanged.connect(self._reload_value_metadata)
[docs] def init_models(self, db_maps):
"""Initializes editor's models.
Args:
db_maps (Iterable of DiffDatabaseMapping): database mappings
"""
self._item_metadata_table_model.set_db_maps(db_maps)
@Slot(QModelIndex, QModelIndex)
[docs] def _reload_entity_metadata(self, current_index, previous_index):
"""Loads entity metadata for selected object or relationship.
Args:
current_index (QModelIndex): currently selected index in object/relationship tree
previous_index (QModelIndex): unused
"""
self._item_metadata_table_view.setEnabled(False)
self._item_metadata_table_model.clear()
if not current_index.isValid():
return
item = current_index.model().item_from_index(current_index)
if not isinstance(item, EntityItem):
return
self._item_metadata_table_model.set_entity_ids(item.db_map_ids)
self._item_metadata_table_view.setEnabled(True)
@Slot(QModelIndex, QModelIndex)
[docs] def _reload_value_metadata(self, current_index, previous_index):
"""Loads parameter value metadata for selected value.
Args:
current_index (QModelIndex): currently selected index in object/relationship parameter value table
previous_index (QModelIndex): unused
"""
self._item_metadata_table_view.setEnabled(False)
self._item_metadata_table_model.clear()
if not current_index.isValid():
return
db_map, id_ = current_index.model().db_map_id(current_index)
if id_ is None:
return
db_map_ids = {db_map: id_}
self._item_metadata_table_model.set_parameter_value_ids(db_map_ids)
self._item_metadata_table_view.setEnabled(True)