File indexing completed on 2025-03-09 04:54:39
0001 /* 0002 SPDX-FileCopyrightText: 2014-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "mimeparttreeview.h" 0008 #include "mimetreemodel.h" 0009 #include "settings/messageviewersettings.h" 0010 0011 #include <KMime/Content> 0012 0013 #include <KConfigGroup> 0014 #include <QHeaderView> 0015 0016 using namespace MessageViewer; 0017 namespace 0018 { 0019 static const char myMimePartTreeViewConfigGroupName[] = "MimePartTree"; 0020 } 0021 MimePartTreeView::MimePartTreeView(QWidget *parent) 0022 : QTreeView(parent) 0023 , mMimePartModel(new MimeTreeModel(this)) 0024 { 0025 setObjectName(QLatin1StringView("mMimePartTree")); 0026 0027 setModel(mMimePartModel); 0028 setSelectionMode(QAbstractItemView::ExtendedSelection); 0029 setSelectionBehavior(QAbstractItemView::SelectRows); 0030 setContextMenuPolicy(Qt::CustomContextMenu); 0031 header()->setSectionResizeMode(QHeaderView::ResizeToContents); 0032 connect(mMimePartModel, &MimeTreeModel::modelReset, this, &MimePartTreeView::expandAll); 0033 restoreMimePartTreeConfig(); 0034 setDragEnabled(true); 0035 } 0036 0037 MimePartTreeView::~MimePartTreeView() 0038 { 0039 // root is either null or a modified tree that we need to clean up 0040 clearModel(); 0041 saveMimePartTreeConfig(); 0042 } 0043 0044 MimeTreeModel *MimePartTreeView::mimePartModel() const 0045 { 0046 return mMimePartModel; 0047 } 0048 0049 void MimePartTreeView::restoreMimePartTreeConfig() 0050 { 0051 KConfigGroup grp(KSharedConfig::openStateConfig(), QLatin1StringView(myMimePartTreeViewConfigGroupName)); 0052 header()->restoreState(grp.readEntry("State", QByteArray())); 0053 } 0054 0055 void MimePartTreeView::saveMimePartTreeConfig() 0056 { 0057 KConfigGroup grp(KSharedConfig::openStateConfig(), QLatin1StringView(myMimePartTreeViewConfigGroupName)); 0058 grp.writeEntry("State", header()->saveState()); 0059 } 0060 0061 void MimePartTreeView::clearModel() 0062 { 0063 delete mMimePartModel->root(); 0064 mMimePartModel->setRoot(nullptr); 0065 } 0066 0067 void MimePartTreeView::setRoot(KMime::Content *root) 0068 { 0069 delete mMimePartModel->root(); 0070 mMimePartModel->setRoot(root); 0071 } 0072 0073 KMime::Content::List MimePartTreeView::selectedContents() const 0074 { 0075 KMime::Content::List contents; 0076 QItemSelectionModel *selectModel = selectionModel(); 0077 const QModelIndexList selectedRows = selectModel->selectedRows(); 0078 contents.reserve(selectedRows.count()); 0079 for (const QModelIndex &index : selectedRows) { 0080 auto content = static_cast<KMime::Content *>(index.internalPointer()); 0081 if (content) { 0082 contents.append(content); 0083 } 0084 } 0085 return contents; 0086 } 0087 0088 #include "moc_mimeparttreeview.cpp"