Skip to content

Commit 77597f7

Browse files
committed
If a tag is marked as preserved, disable modify/remove actions
1 parent 458a7e3 commit 77597f7

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

picard/ui/metadatabox.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@
7373
)
7474

7575

76+
def bit_not(num):
77+
"""Bitwise not, unsigned"""
78+
return num ^ ((1 << num.bit_length()) - 1)
79+
80+
7681
class TagStatus:
7782
NONE = 0
7883
NOCHANGE = 1
@@ -185,6 +190,12 @@ def tag_status(self, tag):
185190
return s
186191
return TagStatus.NOCHANGE
187192

193+
def set_bits(self, tag, bits):
194+
self.status[tag] |= bits
195+
196+
def unset_bits(self, tag, bits):
197+
self.status[tag] &= bit_not(bits)
198+
188199

189200
class TableTagEditorDelegate(TagEditorDelegate):
190201

@@ -474,7 +485,7 @@ def _edit_selected_tag(self):
474485
self._edit_tag(tags[0])
475486

476487
def _toggle_preserved(self):
477-
for tag in self._selected_tags(filter_func=self._tag_is_editable):
488+
for tag in self._selected_tags(filter_func=lambda t: t != '~length'):
478489
if tag in self.preserved_tags:
479490
self.preserved_tags.discard(tag)
480491
else:
@@ -714,11 +725,14 @@ def _update_items(self, result=None, error=None):
714725
if not new_item:
715726
new_item = QtWidgets.QTableWidgetItem()
716727
new_item.setTextAlignment(alignment)
717-
if tag == '~length':
718-
new_item.setFlags(orig_flags)
719-
else:
720-
new_item.setFlags(new_flags)
721728
self.setItem(i, self.COLUMN_NEW, new_item)
729+
if is_preserved or tag == '~length':
730+
self.tag_diff.set_bits(tag, TagStatus.NOTREMOVABLE | TagStatus.READONLY)
731+
new_item.setFlags(orig_flags)
732+
else:
733+
if tag != '~length':
734+
self.tag_diff.unset_bits(tag, TagStatus.NOTREMOVABLE | TagStatus.READONLY)
735+
new_item.setFlags(new_flags)
722736
self._set_item_value(new_item, self.tag_diff.new, tag)
723737
font = new_item.font()
724738
strikeout = self.tag_diff.tag_status(tag) == TagStatus.REMOVED

0 commit comments

Comments
 (0)