MailTransport

transportlistview.cpp
1/*
2 SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
3
4 Based on KMail code by:
5 SPDX-FileCopyrightText: 2002 Marc Mutz <mutz@kde.org>
6 SPDX-FileCopyrightText: 2007 Mathias Soeken <msoeken@tzi.de>
7
8 SPDX-License-Identifier: LGPL-2.0-or-later
9*/
10
11#include "transportlistview.h"
12#include "transport.h"
13#include "transportmanager.h"
14#include "transporttype.h"
15
16#include <QHeaderView>
17#include <QLineEdit>
18
19#include "mailtransport_debug.h"
20#include <KLocalizedString>
21
22using namespace MailTransport;
23
24TransportListView::TransportListView(QWidget *parent)
25 : QTreeWidget(parent)
26{
27 setHeaderLabels(QStringList() << i18nc("@title:column email transport name", "Name") << i18nc("@title:column email transport type", "Type"));
28 setRootIsDecorated(false);
29 header()->setSectionsMovable(false);
30 header()->setSectionResizeMode(QHeaderView::ResizeToContents);
31 setAllColumnsShowFocus(true);
32 setAlternatingRowColors(true);
33 setSortingEnabled(true);
34 sortByColumn(0, Qt::AscendingOrder);
35 setSelectionMode(SingleSelection);
36
37 fillTransportList();
38 connect(TransportManager::self(), &TransportManager::transportsChanged, this, &TransportListView::fillTransportList);
39}
40
41void TransportListView::editItem(QTreeWidgetItem *item, int column)
42{
43 // TODO: is there a nicer way to make only the 'name' column editable?
44 if (column == 0 && item) {
47 QTreeWidget::editItem(item, 0);
48 item->setFlags(oldFlags);
49 const int id = item->data(0, Qt::UserRole).toInt();
51 if (!t) {
52 qCWarning(MAILTRANSPORT_LOG) << "Transport" << id << "not known by manager.";
53 return;
54 }
55 if (TransportManager::self()->defaultTransportId() == t->id()) {
56 item->setText(0, t->name());
57 }
58 }
59}
60
61void TransportListView::commitData(QWidget *editor)
62{
63 if (selectedItems().isEmpty()) {
64 // transport was deleted by someone else???
65 qCDebug(MAILTRANSPORT_LOG) << "No selected item.";
66 return;
67 }
68 QTreeWidgetItem *item = selectedItems().first();
69 auto edit = dynamic_cast<QLineEdit *>(editor); // krazy:exclude=qclasses
70 Q_ASSERT(edit); // original code had if
71
72 const int id = item->data(0, Qt::UserRole).toInt();
74 if (!t) {
75 qCWarning(MAILTRANSPORT_LOG) << "Transport" << id << "not known by manager.";
76 return;
77 }
78 qCDebug(MAILTRANSPORT_LOG) << "Renaming transport" << id << "to" << edit->text();
79 t->setName(edit->text());
80 t->forceUniqueName();
81 t->save();
82}
83
84void TransportListView::fillTransportList()
85{
86 // try to preserve the selection
87 int selected = -1;
88 if (currentItem()) {
89 selected = currentItem()->data(0, Qt::UserRole).toInt();
90 }
91
92 clear();
94 for (Transport *t : lstTransports) {
95 auto item = new QTreeWidgetItem(this);
96 item->setData(0, Qt::UserRole, t->id());
97 QString name = t->name();
98 if (TransportManager::self()->defaultTransportId() == t->id()) {
99 name += i18nc("@label the default mail transport", " (Default)");
100 QFont font(item->font(0));
101 font.setBold(true);
102 item->setFont(0, font);
103 }
104 item->setText(0, name);
105 item->setText(1, t->transportType().name());
106 if (t->id() == selected) {
107 setCurrentItem(item);
108 }
109 }
110}
111
112#include "moc_transportlistview.cpp"
Transport * transportById(Transport::Id id, bool def=true) const
Returns the Transport object with the given id.
Q_SCRIPTABLE void transportsChanged()
Emitted when transport settings have changed (by this or any other TransportManager instance).
static TransportManager * self()
Returns the TransportManager instance.
QList< Transport * > transports() const
Returns a list of all available transports.
Represents the settings of a specific mail transport.
Definition transport.h:33
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString name(StandardShortcut id)
virtual bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event)
T qobject_cast(QObject *object)
UserRole
typedef ItemFlags
AscendingOrder
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
void clear()
QTreeWidgetItem * currentItem() const const
void editItem(QTreeWidgetItem *item, int column)
QList< QTreeWidgetItem * > selectedItems() const const
void setCurrentItem(QTreeWidgetItem *item)
virtual QVariant data(int column, int role) const const
Qt::ItemFlags flags() const const
QFont font(int column) const const
virtual void setData(int column, int role, const QVariant &value)
void setFlags(Qt::ItemFlags flags)
void setFont(int column, const QFont &font)
void setText(int column, const QString &text)
int toInt(bool *ok) const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:12:37 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.