From 2d62fb993fc800447b146ede281e1d89f1d115d2 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sun, 2 Oct 2022 14:05:25 +0100 Subject: [PATCH] Facility to add notes when inserting tracks --- app/musicmuster.py | 18 +++++++++--- app/playlists.py | 11 ++++++-- app/ui/dlg_SearchDatabase.ui | 48 ++++++++++++++++++++++++++++---- app/ui/dlg_search_database_ui.py | 39 ++++++++++++++++++++------ 4 files changed, 96 insertions(+), 20 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index 8db848b..93d2955 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -1080,6 +1080,10 @@ class DbDialog(QDialog): self.ui.searchString.textEdited.connect(self.chars_typed) self.ui.track = None + if get_one_track: + self.ui.txtNote.hide() + self.ui.lblNote.hide() + record = Settings.get_int_settings(self.session, "dbdialog_width") width = record.f_int or 800 record = Settings.get_int_settings(self.session, "dbdialog_height") @@ -1100,11 +1104,14 @@ class DbDialog(QDialog): def add_selected(self) -> None: """Handle Add button""" - if not self.ui.matchList.selectedItems(): + if (not self.ui.matchList.selectedItems() and + not self.ui.txtNote.text()): return + track = None item = self.ui.matchList.currentItem() - track = item.data(Qt.UserRole) + if item: + track = item.data(Qt.UserRole) self.add_track(track) def add_selected_and_close(self) -> None: @@ -1121,10 +1128,13 @@ class DbDialog(QDialog): self.accept() return - self.parent().visible_playlist_tab().insert_track(self.session, track) + self.parent().visible_playlist_tab().insert_track( + self.session, track, note=self.ui.txtNote.text()) # Commit session to get correct row numbers if more tracks added self.session.commit() - # Select search text to make it easier for next search + # Clear note field and select search text to make it easier for + # next search + self.ui.txtNote.clear() self.select_searchtext() def chars_typed(self, s: str) -> None: diff --git a/app/playlists.py b/app/playlists.py index 6514a39..bff9f72 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -680,8 +680,8 @@ class PlaylistTab(QTableWidget): self.save_playlist(session) self.update_display(session, clear_selection=False) - def insert_track(self, session: Session, track: Tracks, - repaint: bool = True) -> None: + def insert_track(self, session: Session, track: Optional[Tracks], + note: str = None, repaint: bool = True) -> None: """ Insert track into playlist tab. @@ -696,7 +696,12 @@ class PlaylistTab(QTableWidget): # can be reset by calling PlaylistRows.fixup_rownumbers() later, # so just fudge a row number for now. row_number = 0 - plr = PlaylistRows(session, self.playlist_id, track.id, row_number) + if track: + track_id = track.id + else: + track_id = None + plr = PlaylistRows(session, self.playlist_id, + track_id, row_number, note) self.insert_row(session, plr) PlaylistRows.fixup_rownumbers(session, self.playlist_id) if repaint: diff --git a/app/ui/dlg_SearchDatabase.ui b/app/ui/dlg_SearchDatabase.ui index ba48dee..c8af805 100644 --- a/app/ui/dlg_SearchDatabase.ui +++ b/app/ui/dlg_SearchDatabase.ui @@ -13,8 +13,8 @@ Dialog - - + + @@ -28,10 +28,42 @@ - + - + + + + + + + 0 + 0 + + + + + 46 + 16777215 + + + + &Note: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + txtNote + + + + + + + + + @@ -89,8 +121,14 @@ - + + + + 0 + 0 + + diff --git a/app/ui/dlg_search_database_ui.py b/app/ui/dlg_search_database_ui.py index d82b29c..e373884 100644 --- a/app/ui/dlg_search_database_ui.py +++ b/app/ui/dlg_search_database_ui.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'ui/dlg_SearchDatabase.ui' +# Form implementation generated from reading ui file 'app/ui/dlg_SearchDatabase.ui' # -# Created by: PyQt5 UI code generator 5.15.4 +# Created by: PyQt5 UI code generator 5.15.6 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. @@ -15,8 +15,8 @@ class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(584, 377) - self.gridLayout_2 = QtWidgets.QGridLayout(Dialog) - self.gridLayout_2.setObjectName("gridLayout_2") + self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) + self.verticalLayout.setObjectName("verticalLayout") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.label = QtWidgets.QLabel(Dialog) @@ -25,10 +25,26 @@ class Ui_Dialog(object): self.searchString = QtWidgets.QLineEdit(Dialog) self.searchString.setObjectName("searchString") self.gridLayout.addWidget(self.searchString, 0, 1, 1, 1) - self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1) + self.verticalLayout.addLayout(self.gridLayout) self.matchList = QtWidgets.QListWidget(Dialog) self.matchList.setObjectName("matchList") - self.gridLayout_2.addWidget(self.matchList, 1, 0, 1, 1) + self.verticalLayout.addWidget(self.matchList) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.lblNote = QtWidgets.QLabel(Dialog) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.lblNote.sizePolicy().hasHeightForWidth()) + self.lblNote.setSizePolicy(sizePolicy) + self.lblNote.setMaximumSize(QtCore.QSize(46, 16777215)) + self.lblNote.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) + self.lblNote.setObjectName("lblNote") + self.horizontalLayout_2.addWidget(self.lblNote) + self.txtNote = QtWidgets.QLineEdit(Dialog) + self.txtNote.setObjectName("txtNote") + self.horizontalLayout_2.addWidget(self.txtNote) + self.verticalLayout.addLayout(self.horizontalLayout_2) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.radioTitle = QtWidgets.QRadioButton(Dialog) @@ -50,11 +66,17 @@ class Ui_Dialog(object): self.btnClose = QtWidgets.QPushButton(Dialog) self.btnClose.setObjectName("btnClose") self.horizontalLayout.addWidget(self.btnClose) - self.gridLayout_2.addLayout(self.horizontalLayout, 2, 0, 1, 1) + self.verticalLayout.addLayout(self.horizontalLayout) self.dbPath = QtWidgets.QLabel(Dialog) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dbPath.sizePolicy().hasHeightForWidth()) + self.dbPath.setSizePolicy(sizePolicy) self.dbPath.setText("") self.dbPath.setObjectName("dbPath") - self.gridLayout_2.addWidget(self.dbPath, 3, 0, 1, 1) + self.verticalLayout.addWidget(self.dbPath) + self.lblNote.setBuddy(self.txtNote) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) @@ -63,6 +85,7 @@ class Ui_Dialog(object): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.label.setText(_translate("Dialog", "Title:")) + self.lblNote.setText(_translate("Dialog", "&Note:")) self.radioTitle.setText(_translate("Dialog", "&Title")) self.radioArtist.setText(_translate("Dialog", "&Artist")) self.btnAdd.setText(_translate("Dialog", "&Add"))