File indexing completed on 2024-05-05 05:13:00
0001 /* 0002 This file is part of Akregator. 0003 0004 SPDX-FileCopyrightText: 2008 Frank Osterfeld <osterfeld@kde.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0007 */ 0008 0009 #include "editsubscriptioncommand.h" 0010 0011 #include "feed.h" 0012 #include "feedlist.h" 0013 #include "feedpropertiesdialog.h" 0014 #include "folder.h" 0015 #include "subscriptionlistview.h" 0016 #include "treenodevisitor.h" 0017 0018 #include <QPointer> 0019 #include <QTimer> 0020 0021 using namespace Akregator; 0022 0023 namespace 0024 { 0025 class EditNodePropertiesVisitor : public TreeNodeVisitor 0026 { 0027 public: 0028 EditNodePropertiesVisitor(SubscriptionListView *subcriptionListView, QWidget *parent); 0029 0030 bool visitFolder(Folder *node) override 0031 { 0032 m_subscriptionListView->startNodeRenaming(node); 0033 return true; 0034 } 0035 0036 bool visitFeed(Akregator::Feed *node) override 0037 { 0038 QPointer<FeedPropertiesDialog> dlg = new FeedPropertiesDialog(m_widget); 0039 dlg->setFeed(node); 0040 dlg->exec(); 0041 delete dlg; 0042 return true; 0043 } 0044 0045 private: 0046 SubscriptionListView *m_subscriptionListView = nullptr; 0047 QWidget *m_widget = nullptr; 0048 }; 0049 } 0050 0051 EditNodePropertiesVisitor::EditNodePropertiesVisitor(SubscriptionListView *subscriptionListView, QWidget *parent) 0052 : m_subscriptionListView(subscriptionListView) 0053 , m_widget(parent) 0054 { 0055 Q_ASSERT(m_subscriptionListView); 0056 Q_ASSERT(m_widget); 0057 } 0058 0059 class Akregator::EditSubscriptionCommandPrivate 0060 { 0061 EditSubscriptionCommand *const q; 0062 0063 public: 0064 explicit EditSubscriptionCommandPrivate(EditSubscriptionCommand *qq); 0065 ~EditSubscriptionCommandPrivate(); 0066 0067 void startEdit(); 0068 void jobFinished(); 0069 0070 QSharedPointer<FeedList> m_list; 0071 uint m_subscriptionId; 0072 SubscriptionListView *m_subscriptionListView = nullptr; 0073 }; 0074 0075 EditSubscriptionCommandPrivate::EditSubscriptionCommandPrivate(EditSubscriptionCommand *qq) 0076 : q(qq) 0077 , m_list() 0078 , m_subscriptionId(0) 0079 , m_subscriptionListView(nullptr) 0080 { 0081 } 0082 0083 EditSubscriptionCommandPrivate::~EditSubscriptionCommandPrivate() = default; 0084 0085 EditSubscriptionCommand::EditSubscriptionCommand(QObject *parent) 0086 : Command(parent) 0087 , d(new EditSubscriptionCommandPrivate(this)) 0088 { 0089 } 0090 0091 EditSubscriptionCommand::~EditSubscriptionCommand() = default; 0092 0093 void EditSubscriptionCommand::setSubscription(const QSharedPointer<FeedList> &feedList, uint subId) 0094 { 0095 d->m_list = feedList; 0096 d->m_subscriptionId = subId; 0097 } 0098 0099 uint EditSubscriptionCommand::subscriptionId() const 0100 { 0101 return d->m_subscriptionId; 0102 } 0103 0104 QSharedPointer<FeedList> EditSubscriptionCommand::feedList() const 0105 { 0106 return d->m_list; 0107 } 0108 0109 SubscriptionListView *EditSubscriptionCommand::subscriptionListView() const 0110 { 0111 return d->m_subscriptionListView; 0112 } 0113 0114 void EditSubscriptionCommand::setSubscriptionListView(SubscriptionListView *view) 0115 { 0116 d->m_subscriptionListView = view; 0117 } 0118 0119 void EditSubscriptionCommand::doStart() 0120 { 0121 QTimer::singleShot(0, this, [this]() { 0122 d->startEdit(); 0123 }); 0124 } 0125 0126 void EditSubscriptionCommandPrivate::startEdit() 0127 { 0128 TreeNode *const node = m_list->findByID(m_subscriptionId); 0129 if (!node) { 0130 q->done(); 0131 return; 0132 } 0133 0134 EditNodePropertiesVisitor visitor(m_subscriptionListView, q->parentWidget()); 0135 visitor.visit(node); 0136 q->done(); 0137 } 0138 0139 void EditSubscriptionCommand::doAbort() 0140 { 0141 } 0142 0143 #include "moc_editsubscriptioncommand.cpp"