File indexing completed on 2024-05-12 05:20:37

0001 /*
0002 
0003     This file is part of KMail.
0004     SPDX-FileCopyrightText: 2002-2003 Don Sanders <sanders@kde.org>,
0005     SPDX-FileCopyrightText: 2003 Zack Rusin <zack@kde.org>,
0006     Based on the work of Cornelius Schumacher <schumacher@kde.org>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0009 */
0010 
0011 #include "kmail_part.h"
0012 
0013 #include "kmmainwidget.h"
0014 
0015 #include <QVBoxLayout>
0016 
0017 #include "foldershortcutactionmanager.h"
0018 #include "kmail_debug.h"
0019 #include "tag/tagactionmanager.h"
0020 #include <Akonadi/ChangeRecorder>
0021 #include <Akonadi/Collection>
0022 #include <Akonadi/EntityDisplayAttribute>
0023 #include <KLocalizedString>
0024 #include <KParts/GUIActivateEvent>
0025 #include <KPluginFactory>
0026 #include <KSharedConfig>
0027 #include <MailCommon/FolderTreeView>
0028 #include <kmailpartadaptor.h>
0029 #include <kparts/mainwindow.h>
0030 #include <kparts/statusbarextension.h>
0031 
0032 K_PLUGIN_FACTORY(KMailFactory, registerPlugin<KMailPart>();)
0033 
0034 using namespace KMail;
0035 
0036 KMailPart::KMailPart(QWidget *parentWidget, QObject *parent, const KPluginMetaData &data, const QVariantList &)
0037     : KParts::ReadOnlyPart(parent, data)
0038 {
0039     setComponentName(QStringLiteral("kmail2"), i18n("KMail2"));
0040     // local, do the init
0041     auto mKMailKernel = new KMKernel();
0042     mKMailKernel->init();
0043     mKMailKernel->setXmlGuiInstanceName(QStringLiteral("kmail2"));
0044 
0045     // and session management
0046     mKMailKernel->doSessionManagement();
0047 
0048     // any dead letters?
0049     mKMailKernel->recoverDeadLetters();
0050 
0051     kmkernel->setupDBus(); // Ok. We are ready for D-Bus requests.
0052     (void)new KmailpartAdaptor(this);
0053     QDBusConnection::sessionBus().registerObject(QStringLiteral("/KMailPart"), this);
0054 
0055     // create a canvas to insert our widget
0056     auto canvas = new QWidget(parentWidget);
0057     canvas->setFocusPolicy(Qt::ClickFocus);
0058     canvas->setObjectName(QLatin1StringView("canvas"));
0059     setWidget(canvas);
0060     mainWidget = new KMMainWidget(canvas, this, actionCollection(), KSharedConfig::openConfig());
0061     mainWidget->setObjectName(QLatin1StringView("partmainwidget"));
0062     auto topLayout = new QVBoxLayout(canvas);
0063     topLayout->addWidget(mainWidget);
0064     topLayout->setContentsMargins({});
0065     mainWidget->setFocusPolicy(Qt::ClickFocus);
0066     auto statusBar = new KParts::StatusBarExtension(this);
0067     statusBar->addStatusBarItem(mainWidget->vacationScriptIndicator(), 2, false);
0068     statusBar->addStatusBarItem(mainWidget->zoomLabelIndicator(), 3, false);
0069     statusBar->addStatusBarItem(mainWidget->dkimWidgetInfo(), 4, false);
0070 
0071     setXMLFile(QStringLiteral("kmail_part.rc"), true);
0072     connect(mainWidget, &KMMainWidget::captionChangeRequest, this, &KMailPart::setWindowCaption);
0073 }
0074 
0075 KMailPart::~KMailPart()
0076 {
0077     qCDebug(KMAIL_LOG) << "Closing last KMMainWin: stopping mail check";
0078     // Running KIO jobs prevent kapp from exiting, so we need to kill them
0079     // if they are only about checking mail (not important stuff like moving messages)
0080     mainWidget->destruct();
0081     kmkernel->cleanup();
0082     delete kmkernel;
0083 }
0084 
0085 void KMailPart::updateQuickSearchText()
0086 {
0087     mainWidget->updateQuickSearchLineText();
0088 }
0089 
0090 bool KMailPart::openFile()
0091 {
0092     return true;
0093 }
0094 
0095 //-----------------------------------------------------------------------------
0096 
0097 void KMailPart::guiActivateEvent(KParts::GUIActivateEvent *e)
0098 {
0099     KParts::ReadOnlyPart::guiActivateEvent(e);
0100     if (e->activated()) {
0101         mainWidget->initializeFilterActions(true);
0102         mainWidget->tagActionManager()->createActions();
0103         mainWidget->folderShortcutActionManager()->createActions();
0104         mainWidget->populateMessageListStatusFilterCombo();
0105         mainWidget->initializePluginActions();
0106 
0107         const QString title = mainWidget->fullCollectionPath();
0108         if (!title.isEmpty()) {
0109             Q_EMIT setWindowCaption(title);
0110         }
0111     }
0112 }
0113 
0114 void KMailPart::exit()
0115 {
0116     delete this;
0117 }
0118 
0119 void KMailPart::save()
0120 {
0121     /*TODO*/
0122 }
0123 
0124 #include "kmail_part.moc"
0125 
0126 #include "moc_kmail_part.cpp"