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 "createfoldercommand.h" 0010 0011 #include "folder.h" 0012 #include "subscriptionlistview.h" 0013 0014 #include <KLocalizedString> 0015 #include <QInputDialog> 0016 0017 #include <QTimer> 0018 0019 #include <cassert> 0020 0021 using namespace Akregator; 0022 0023 class Akregator::CreateFolderCommandPrivate 0024 { 0025 CreateFolderCommand *const q; 0026 0027 public: 0028 explicit CreateFolderCommandPrivate(CreateFolderCommand *qq); 0029 0030 void doCreate(); 0031 0032 TreeNode *m_selectedSubscription = nullptr; 0033 Folder *m_rootFolder = nullptr; 0034 SubscriptionListView *m_subscriptionListView = nullptr; 0035 }; 0036 0037 CreateFolderCommandPrivate::CreateFolderCommandPrivate(CreateFolderCommand *qq) 0038 : q(qq) 0039 { 0040 } 0041 0042 void CreateFolderCommandPrivate::doCreate() 0043 { 0044 Q_ASSERT(m_rootFolder); 0045 Q_ASSERT(m_subscriptionListView); 0046 bool ok; 0047 const QString name = QInputDialog::getText(q->parentWidget(), i18n("Add Folder"), i18n("Folder name:"), QLineEdit::Normal, QString(), &ok); 0048 if (!ok || name.trimmed().isEmpty()) { 0049 q->done(); 0050 return; 0051 } 0052 0053 auto parentFolder = qobject_cast<Folder *>(m_selectedSubscription); 0054 if (!parentFolder) { 0055 parentFolder = m_selectedSubscription ? m_selectedSubscription->parent() : nullptr; 0056 } 0057 if (!parentFolder) { 0058 parentFolder = m_rootFolder; 0059 } 0060 0061 TreeNode *const after = (m_selectedSubscription && m_selectedSubscription->isGroup()) ? m_selectedSubscription : nullptr; 0062 0063 auto const newFolder = new Folder(name); 0064 parentFolder->insertChild(newFolder, after); 0065 m_subscriptionListView->ensureNodeVisible(newFolder); 0066 q->done(); 0067 } 0068 0069 CreateFolderCommand::CreateFolderCommand(QObject *parent) 0070 : Command(parent) 0071 , d(new CreateFolderCommandPrivate(this)) 0072 { 0073 } 0074 0075 CreateFolderCommand::~CreateFolderCommand() = default; 0076 0077 void CreateFolderCommand::setSubscriptionListView(SubscriptionListView *view) 0078 { 0079 d->m_subscriptionListView = view; 0080 } 0081 0082 void CreateFolderCommand::setSelectedSubscription(TreeNode *selected) 0083 { 0084 d->m_selectedSubscription = selected; 0085 } 0086 0087 void CreateFolderCommand::setRootFolder(Folder *rootFolder) 0088 { 0089 d->m_rootFolder = rootFolder; 0090 } 0091 0092 void CreateFolderCommand::doStart() 0093 { 0094 QTimer::singleShot(0, this, [this]() { 0095 d->doCreate(); 0096 }); 0097 } 0098 0099 void CreateFolderCommand::doAbort() 0100 { 0101 } 0102 0103 #include "moc_createfoldercommand.cpp"