File indexing completed on 2024-09-22 04:47:57
0001 /* 0002 SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com> 0003 0004 Based on KMail code by: 0005 SPDX-FileCopyrightText: 2002 Marc Mutz <mutz@kde.org> 0006 SPDX-FileCopyrightText: 2007 Mathias Soeken <msoeken@tzi.de> 0007 0008 SPDX-License-Identifier: LGPL-2.0-or-later 0009 */ 0010 0011 #include "transportlistview.h" 0012 #include "transport.h" 0013 #include "transportmanager.h" 0014 #include "transporttype.h" 0015 0016 #include <QHeaderView> 0017 #include <QLineEdit> 0018 0019 #include "mailtransport_debug.h" 0020 #include <KLocalizedString> 0021 0022 using namespace MailTransport; 0023 0024 TransportListView::TransportListView(QWidget *parent) 0025 : QTreeWidget(parent) 0026 { 0027 setHeaderLabels(QStringList() << i18nc("@title:column email transport name", "Name") << i18nc("@title:column email transport type", "Type")); 0028 setRootIsDecorated(false); 0029 header()->setSectionsMovable(false); 0030 header()->setSectionResizeMode(QHeaderView::ResizeToContents); 0031 setAllColumnsShowFocus(true); 0032 setAlternatingRowColors(true); 0033 setSortingEnabled(true); 0034 sortByColumn(0, Qt::AscendingOrder); 0035 setSelectionMode(SingleSelection); 0036 0037 fillTransportList(); 0038 connect(TransportManager::self(), &TransportManager::transportsChanged, this, &TransportListView::fillTransportList); 0039 } 0040 0041 void TransportListView::editItem(QTreeWidgetItem *item, int column) 0042 { 0043 // TODO: is there a nicer way to make only the 'name' column editable? 0044 if (column == 0 && item) { 0045 Qt::ItemFlags oldFlags = item->flags(); 0046 item->setFlags(oldFlags | Qt::ItemIsEditable); 0047 QTreeWidget::editItem(item, 0); 0048 item->setFlags(oldFlags); 0049 const int id = item->data(0, Qt::UserRole).toInt(); 0050 Transport *t = TransportManager::self()->transportById(id); 0051 if (!t) { 0052 qCWarning(MAILTRANSPORT_LOG) << "Transport" << id << "not known by manager."; 0053 return; 0054 } 0055 if (TransportManager::self()->defaultTransportId() == t->id()) { 0056 item->setText(0, t->name()); 0057 } 0058 } 0059 } 0060 0061 void TransportListView::commitData(QWidget *editor) 0062 { 0063 if (selectedItems().isEmpty()) { 0064 // transport was deleted by someone else??? 0065 qCDebug(MAILTRANSPORT_LOG) << "No selected item."; 0066 return; 0067 } 0068 QTreeWidgetItem *item = selectedItems().first(); 0069 auto edit = dynamic_cast<QLineEdit *>(editor); // krazy:exclude=qclasses 0070 Q_ASSERT(edit); // original code had if 0071 0072 const int id = item->data(0, Qt::UserRole).toInt(); 0073 Transport *t = TransportManager::self()->transportById(id); 0074 if (!t) { 0075 qCWarning(MAILTRANSPORT_LOG) << "Transport" << id << "not known by manager."; 0076 return; 0077 } 0078 qCDebug(MAILTRANSPORT_LOG) << "Renaming transport" << id << "to" << edit->text(); 0079 t->setName(edit->text()); 0080 t->forceUniqueName(); 0081 t->save(); 0082 } 0083 0084 void TransportListView::fillTransportList() 0085 { 0086 // try to preserve the selection 0087 int selected = -1; 0088 if (currentItem()) { 0089 selected = currentItem()->data(0, Qt::UserRole).toInt(); 0090 } 0091 0092 clear(); 0093 const auto lstTransports = TransportManager::self()->transports(); 0094 for (Transport *t : lstTransports) { 0095 auto item = new QTreeWidgetItem(this); 0096 item->setData(0, Qt::UserRole, t->id()); 0097 QString name = t->name(); 0098 if (TransportManager::self()->defaultTransportId() == t->id()) { 0099 name += i18nc("@label the default mail transport", " (Default)"); 0100 QFont font(item->font(0)); 0101 font.setBold(true); 0102 item->setFont(0, font); 0103 } 0104 item->setText(0, name); 0105 item->setText(1, t->transportType().name()); 0106 if (t->id() == selected) { 0107 setCurrentItem(item); 0108 } 0109 } 0110 } 0111 0112 #include "moc_transportlistview.cpp"