From 20dc81761a4257f0922579ed993f7d1e33c5337f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Pinkava?= Date: Tue, 8 Nov 2022 02:11:21 +0100 Subject: [PATCH] Implement tag renaming --- src/applications/gqrx/mainwindow.cpp | 2 ++ src/qtgui/bookmarks.cpp | 26 +++++++++++++++++++++++++ src/qtgui/bookmarks.h | 1 + src/qtgui/bookmarkstaglist.cpp | 29 ++++++++++++++++++---------- src/qtgui/bookmarkstaglist.h | 5 ++++- src/qtgui/dockbookmarks.cpp | 2 ++ 6 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/applications/gqrx/mainwindow.cpp b/src/applications/gqrx/mainwindow.cpp index 145245497..8c1b08e2e 100644 --- a/src/applications/gqrx/mainwindow.cpp +++ b/src/applications/gqrx/mainwindow.cpp @@ -2380,6 +2380,8 @@ void MainWindow::on_actionAddBookmark_triggered() connect(buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject())); connect(buttonCreateTag, SIGNAL(clicked()), taglist, SLOT(AddNewTag())); + connect(&Bookmarks::Get(), SIGNAL(TagListChanged()), + taglist, SLOT(updateTags())); auto *mainLayout = new QVBoxLayout(&dialog); mainLayout->addWidget(LabelAndTextfieldName); diff --git a/src/qtgui/bookmarks.cpp b/src/qtgui/bookmarks.cpp index c57ba7442..f14760a7c 100644 --- a/src/qtgui/bookmarks.cpp +++ b/src/qtgui/bookmarks.cpp @@ -289,6 +289,32 @@ bool Bookmarks::removeTag(QString tagName) return true; } +bool Bookmarks::renameTag(QString oldName, QString newName) +{ + oldName = oldName.trimmed(); + newName = newName.trimmed(); + + if(oldName == TagInfo::strUntagged || oldName == "") + return false; + + if (oldName == newName) + return false; + + if (getTagIndex(newName) != -1) + return false; + + const int idx = getTagIndex(oldName); + if (idx == -1) + return false; + + m_TagList[idx].name = newName; + + emit BookmarksChanged(); + emit TagListChanged(); + + return true; +} + bool Bookmarks::setTagChecked(QString tagName, bool bChecked) { int idx = getTagIndex(tagName); diff --git a/src/qtgui/bookmarks.h b/src/qtgui/bookmarks.h index cfb795e3a..f67ceaef4 100644 --- a/src/qtgui/bookmarks.h +++ b/src/qtgui/bookmarks.h @@ -116,6 +116,7 @@ class Bookmarks : public QObject TagInfo& findOrAddTag(QString tagName); int getTagIndex(QString tagName); bool removeTag(QString tagName); + bool renameTag(QString oldName, QString newName); bool setTagChecked(QString tagName, bool bChecked); void setConfigDir(const QString&); diff --git a/src/qtgui/bookmarkstaglist.cpp b/src/qtgui/bookmarkstaglist.cpp index adf1e7369..6b20fd0a3 100644 --- a/src/qtgui/bookmarkstaglist.cpp +++ b/src/qtgui/bookmarkstaglist.cpp @@ -35,6 +35,9 @@ BookmarksTagList::BookmarksTagList(QWidget *parent, bool bShowUntagged ) connect(this, SIGNAL(cellClicked(int,int)), this, SLOT(on_cellClicked(int,int))); + connect(this, SIGNAL(itemChanged(QTableWidgetItem *)), + this, SLOT(on_itemChanged(QTableWidgetItem *))); + // right click menu setContextMenuPolicy(Qt::CustomContextMenu); connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), @@ -182,18 +185,12 @@ void BookmarksTagList::ShowContextMenu(const QPoint& pos) { QMenu* menu=new QMenu(this); - // Rename currently does not work. - // The problem is that after the tag name is changed in GUI - // you can not find the right TagInfo because you dont know - // the old tag name. - #if 0 // MenuItem "Rename" { QAction* actionRename = new QAction("Rename", this); menu->addAction(actionRename); connect(actionRename, SIGNAL(triggered()), this, SLOT(RenameSelectedTag())); } - #endif // MenuItem "Create new Tag" { @@ -226,7 +223,6 @@ void BookmarksTagList::ShowContextMenu(const QPoint& pos) menu->popup(viewport()->mapToGlobal(pos)); } -#if 0 bool BookmarksTagList::RenameSelectedTag() { QModelIndexList selected = selectionModel()->selectedRows(); @@ -237,13 +233,11 @@ bool BookmarksTagList::RenameSelectedTag() } int iRow = selected.first().row(); - QTableWidgetItem* pItem = item(iRow,1);bUpdating + QTableWidgetItem* pItem = item(iRow,1); editItem(pItem); - //Bookmarks::Get().save(); return true; } -#endif void BookmarksTagList::AddNewTag() { @@ -252,6 +246,20 @@ void BookmarksTagList::AddNewTag() editItem(item(rowCount()-1, 1)); } +void BookmarksTagList::on_itemChanged(QTableWidgetItem *item) { + if (m_bUpdating) + return; + + QString id = item->data(Qt::UserRole).toString(); + if (id == item->text()) + return; + + item->setData(Qt::UserRole, item->text()); + + Bookmarks::Get().renameTag(id, item->text()); + Bookmarks::Get().save(); +} + void BookmarksTagList::AddTag(QString name, Qt::CheckState checkstate, QColor color) { int i = rowCount(); @@ -259,6 +267,7 @@ void BookmarksTagList::AddTag(QString name, Qt::CheckState checkstate, QColor co // Column 1 QTableWidgetItem *item = new QTableWidgetItem(name); + item->setData(Qt::UserRole, QVariant(name)); item->setCheckState(checkstate); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled); setItem(i, 1, item); diff --git a/src/qtgui/bookmarkstaglist.h b/src/qtgui/bookmarkstaglist.h index 536fce828..af319d027 100644 --- a/src/qtgui/bookmarkstaglist.h +++ b/src/qtgui/bookmarkstaglist.h @@ -40,6 +40,9 @@ class BookmarksTagList : public QTableWidget private: bool m_bShowUntagged; +private slots: + void on_itemChanged(QTableWidgetItem *item); + signals: public slots: @@ -48,7 +51,7 @@ public slots: void changeColor(int row, int column); void toggleCheckedState(int row, int column); void ShowContextMenu(const QPoint& pos); - //bool RenameSelectedTag(); + bool RenameSelectedTag(); void AddNewTag(); void AddTag(QString name, Qt::CheckState checkstate = Qt::Checked, QColor color = TagInfo::DefaultColor); void DeleteSelectedTag(); diff --git a/src/qtgui/dockbookmarks.cpp b/src/qtgui/dockbookmarks.cpp index d7378ef9d..eed18a77e 100644 --- a/src/qtgui/dockbookmarks.cpp +++ b/src/qtgui/dockbookmarks.cpp @@ -253,6 +253,8 @@ void DockBookmarks::changeBookmarkTags(int row, int /*column*/) | QDialogButtonBox::Cancel); connect(buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject())); + connect(&Bookmarks::Get(), SIGNAL(TagListChanged()), + taglist, SLOT(updateTags())); QVBoxLayout *mainLayout = new QVBoxLayout(&dialog); mainLayout->addWidget(taglist);