diff --git a/picard/ui/edittagdialog.py b/picard/ui/edittagdialog.py index 90758afe2..e72c2259f 100644 --- a/picard/ui/edittagdialog.py +++ b/picard/ui/edittagdialog.py @@ -121,17 +121,37 @@ class EditTagDialog(PicardDialog): self.value_selection_changed() self.restore_geometry() + def keyPressEvent(self, event): + if event.modifiers() == QtCore.Qt.NoModifier and event.key() in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return): + self.add_or_edit_value() + event.accept() + else: + super().keyPressEvent(event) + + def tag_selected(self, index): + self.add_or_edit_value() + def edit_value(self): item = self.value_list.currentItem() - if item: + if item and not self.value_list.isPersistentEditorOpen(item): self.value_list.editItem(item) def add_value(self): item = QtWidgets.QListWidgetItem() item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsEditable) self.value_list.addItem(item) + self.value_list.setCurrentItem(item) self.value_list.editItem(item) + def add_or_edit_value(self): + last_item = self.value_list.item(self.value_list.count() - 1) + # Edit the last item, if it is empty, or add a new empty item + if last_item and not last_item.text(): + self.value_list.setCurrentItem(last_item) + self.edit_value() + else: + self.add_value() + def remove_value(self): value_list = self.value_list row = value_list.currentRow() diff --git a/picard/ui/ui_edittagdialog.py b/picard/ui/ui_edittagdialog.py index 3d0505406..d24199883 100644 --- a/picard/ui/ui_edittagdialog.py +++ b/picard/ui/ui_edittagdialog.py @@ -102,6 +102,7 @@ class Ui_EditTagDialog(object): self.remove_value.clicked.connect(EditTagDialog.remove_value) self.value_list.itemSelectionChanged.connect(EditTagDialog.value_selection_changed) self.tag_names.editTextChanged['QString'].connect(EditTagDialog.tag_changed) + self.tag_names.activated['QString'].connect(EditTagDialog.tag_selected) QtCore.QMetaObject.connectSlotsByName(EditTagDialog) EditTagDialog.setTabOrder(self.tag_names, self.value_list) EditTagDialog.setTabOrder(self.value_list, self.edit_value) diff --git a/ui/edittagdialog.ui b/ui/edittagdialog.ui index 8145897ef..8a2a69863 100644 --- a/ui/edittagdialog.ui +++ b/ui/edittagdialog.ui @@ -144,7 +144,8 @@ - + + .. @@ -160,7 +161,8 @@ - + + .. @@ -375,6 +377,22 @@ + + tag_names + activated(QString) + EditTagDialog + tag_selected() + + + 199 + 21 + + + 199 + 124 + + + move_row_up() @@ -385,5 +403,6 @@ value_edited() value_selection_changed() tag_changed() + tag_selected()