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"