Skip to content

Commit 99935b2

Browse files
author
Michael Whapples
committed
Make metadata model support inserting and removing items.
1 parent 0160d16 commit 99935b2

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

src/convert2ebrl/tabs/metadata_tab.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@
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/>.
77
import 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
1112
from PySide6.QtWidgets import QWidget, QVBoxLayout, QTableView, QAbstractItemView, QGroupBox
1213
# noinspection PyUnresolvedReferences
1314
from __feature__ import snake_case, true_property
1415
from 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

6378
class MetadataWidget(QWidget):
6479
def __init__(self, parent: QObject | None = None):

0 commit comments

Comments
 (0)