Disable removing non-green tags when clear_existing_tags is false

This was misleading, because removing the tag in this case wouldn't
have any effect (as could be seen by reloading the file).

This disables the menu option, and clearing the text-field manually.

Another bug is fixed: removing a green tag should remove it from the
metadatabox.
This commit is contained in:
Michael Wiencek
2012-05-22 19:34:55 -05:00
parent 054f611137
commit 8be2a0eb13

View File

@@ -95,7 +95,6 @@ class MetadataBox(QtGui.QTableWidget):
self.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
self.setStyleSheet("QTableWidget {border: none;}")
self.itemChanged.connect(self.item_changed)
self._item_signals = True
self.colors = {
"default": self.palette().color(QtGui.QPalette.Text),
"removed": QtGui.QBrush(QtGui.QColor("red")),
@@ -159,7 +158,7 @@ class MetadataBox(QtGui.QTableWidget):
if tag != "~length":
column = item.column()
if column == 1:
if self.tag_status(tag) == "changed" and tag not in self.new_tags.different:
if self.tag_status(tag) in ("changed", "removed") and tag not in self.new_tags.different:
copy_to_new_action = QtGui.QAction(_(u"Copy to New Value"), self.parent)
copy_to_new_action.triggered.connect(partial(self.copy_to_new, tag))
menu.addAction(copy_to_new_action)
@@ -168,7 +167,7 @@ class MetadataBox(QtGui.QTableWidget):
edit_tag_action = QtGui.QAction(_(u"Edit..."), self.parent)
edit_tag_action.triggered.connect(partial(self.edit_tag, tag))
menu.addAction(edit_tag_action)
if self.tag_status(tag) != "removed":
if self.tag_is_removable(tag):
remove_tag_action = QtGui.QAction(_(u"Remove"), self.parent)
remove_tag_action.triggered.connect(partial(self.remove_tag, tag))
menu.addAction(remove_tag_action)
@@ -188,11 +187,19 @@ class MetadataBox(QtGui.QTableWidget):
def set_tag_values(self, tag, values):
self.parent.ignore_selection_changes = True
self.new_tags[tag] = values
self.new_tags.different.discard(tag)
for obj in self.objects:
obj.metadata._items[tag] = values
obj.update()
empty = values == [""]
if not empty or self.tag_is_removable(tag):
if empty:
self.new_tags.pop(tag, None)
else:
self.new_tags[tag] = values
self.new_tags.different.discard(tag)
for obj in self.objects:
if empty:
obj.metadata.pop(tag)
else:
obj.metadata._items[tag] = values
obj.update()
self.update()
self.parent.ignore_selection_changes = False
@@ -202,6 +209,10 @@ class MetadataBox(QtGui.QTableWidget):
def remove_tag(self, tag):
self.set_tag_values(tag, [""])
def tag_is_removable(self, tag):
tag_status = self.tag_status(tag)
return tag_status != "removed" and self.config.setting["clear_existing_tags"] or tag_status == "added"
def update_selection(self):
self.selection_mutex.lock()
self.selection_dirty = True
@@ -302,7 +313,7 @@ class MetadataBox(QtGui.QTableWidget):
self.update()
return
self._item_signals = False
self.itemChanged.disconnect(self.item_changed)
self.setRowCount(len(self.tag_names))
flags = QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
@@ -330,7 +341,7 @@ class MetadataBox(QtGui.QTableWidget):
self.set_item_value(new_item, self.new_tags, name)
self.set_row_colors(i)
self._item_signals = True
self.itemChanged.connect(self.item_changed)
self.updating = False
if self.update_pending:
self.update()
@@ -366,26 +377,7 @@ class MetadataBox(QtGui.QTableWidget):
return "default"
def item_changed(self, item):
if not self._item_signals:
return
self._item_signals = False
tag = self.tag_names[item.row()]
value = unicode(item.text())
value = [value] if value else []
self.new_tags[tag] = value
self.new_tags.different.discard(tag)
font = item.font()
font.setItalic(False)
item.setFont(font)
self.set_row_colors(item.row())
self.parent.ignore_selection_changes = True
for obj in self.objects:
obj.metadata._items[tag] = value
obj.update()
if self.config.persist["show_changes_first"]:
self.update()
self.parent.ignore_selection_changes = False
self._item_signals = True
self.set_tag_values(self.tag_names[item.row()], [unicode(item.text())])
def restore_state(self):
sizes = self.config.persist["metadata_box_sizes"].split(" ")