55# Convert2EBRL 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 General Public License for more details.
66# You should have received a copy of the GNU General Public License along with Convert2EBRL. If not, see <https://www.gnu.org/licenses/>.
77import datetime
8- from collections .abc import Iterable
8+ from collections .abc import Iterable , Sequence
99
10- from PySide6 .QtCore import QAbstractTableModel , QModelIndex , QPersistentModelIndex , QObject , Qt , QDate
10+ from PySide6 .QtCore import QModelIndex , QPersistentModelIndex , QObject , Qt , QDate , \
11+ QAbstractListModel
1112from PySide6 .QtWidgets import QWidget , QVBoxLayout , QTableView , QAbstractItemView , QGroupBox
1213# noinspection PyUnresolvedReferences
1314from __feature__ import snake_case , true_property
1415from brf2ebrl .utils .metadata import DEFAULT_METADATA , MetadataItem
1516
1617
17- class MetaDataTableModel (QAbstractTableModel ):
18+ class MetaDataTableModel (QAbstractListModel ):
1819 def __init__ (self , metadata_entries : list [MetadataItem ]= None , parent = None ):
1920 super ().__init__ (parent )
2021 self ._metadata_entries = metadata_entries if metadata_entries is not None else DEFAULT_METADATA
@@ -25,8 +26,19 @@ def metadata_entries(self) -> Iterable[MetadataItem]:
2526
2627 def row_count (self , index : QModelIndex | QPersistentModelIndex = QModelIndex ()):
2728 return len (self ._metadata_entries )
28- def column_count (self , index : QModelIndex | QPersistentModelIndex = QModelIndex ()):
29- return 1
29+
30+ def insert_rows (self , row : int , data : Sequence [MetadataItem ], parent : QModelIndex = QModelIndex ()) -> bool :
31+ self .begin_insert_rows (QModelIndex (), row , row + len (data ) - 1 )
32+ for i , v in enumerate (data ):
33+ self ._metadata_entries .insert (row + i , v )
34+ self .end_insert_rows ()
35+ return True
36+
37+ def remove_rows (self , row : int , count : int = 1 , parent :QModelIndex = QModelIndex ()) -> bool :
38+ self .begin_remove_rows (QModelIndex (), row , row + count - 1 )
39+ del self ._metadata_entries [row :row + count ]
40+ self .end_remove_rows ()
41+ return True
3042 def data (self , index , role = Qt .ItemDataRole .DisplayRole ):
3143 if index .is_valid () and 0 <= index .row () < len (self ._metadata_entries ):
3244 item = self ._metadata_entries [index .row ()]
@@ -37,6 +49,7 @@ def data(self, index, role=Qt.ItemDataRole.DisplayRole):
3749 case value :
3850 return value
3951 return None
52+
4053 def set_data (self , index , value , / , role = Qt .ItemDataRole .EditRole ):
4154 if index .is_valid () and 0 <= index .row () < len (self ._metadata_entries ):
4255 item = self ._metadata_entries [index .row ()]
@@ -48,17 +61,19 @@ def set_data(self, index, value, /, role = Qt.ItemDataRole.EditRole):
4861 self .dataChanged .emit (index , index , 0 )
4962 return True
5063 return False
64+
5165 def header_data (self , section , orientation , role = Qt .ItemDataRole .DisplayRole ):
5266 if role != Qt .ItemDataRole .DisplayRole :
5367 return None
5468 if orientation == Qt .Orientation .Vertical :
5569 item = self ._metadata_entries [section ]
5670 return item .name
5771 return None
72+
5873 def flags (self , index ):
5974 if not index .is_valid ():
6075 return Qt .ItemFlag .ItemIsEnabled
61- return QAbstractTableModel .flags (self , index ) | Qt .ItemFlag .ItemIsEditable
76+ return QAbstractListModel .flags (self , index ) | Qt .ItemFlag .ItemIsEditable
6277
6378class MetadataWidget (QWidget ):
6479 def __init__ (self , parent : QObject | None = None ):
0 commit comments