1/*
2 Copyright (c) 2006 - 2007 Volker Krause <vkrause@kde.org>
3
4 Based on KMail code by:
5 Copyright (C) 2001-2003 Marc Mutz <mutz@kde.org>
6
7 This library is free software; you can redistribute it and/or modify it
8 under the terms of the GNU Library General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or (at your
10 option) any later version.
11
12 This library is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
15 License for more details.
16
17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to the
19 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA.
21*/
22
23#include "transportmanagementwidget.h"
24#include "ui_transportmanagementwidget.h"
25#include "transportmanager.h"
26#include "transport.h"
27
28#include <KMessageBox>
29#include <KMenu>
30#include <KGlobal>
31
32using namespace MailTransport;
33
34class TransportManagementWidget::Private
35{
36 public:
37
38 Private( TransportManagementWidget *parent );
39
40 Ui::TransportManagementWidget ui;
41 TransportManagementWidget *q;
42
43 // Slots
44 void defaultClicked();
45 void removeClicked();
46 void renameClicked();
47 void editClicked();
48 void addClicked();
49 void updateButtonState();
50 void slotCustomContextMenuRequested( const QPoint & );
51};
52
53TransportManagementWidget::Private::Private( TransportManagementWidget *parent )
54 : q( parent )
55{
56}
57
58TransportManagementWidget::TransportManagementWidget( QWidget *parent )
59 : QWidget( parent ), d( new Private( this ) )
60{
61 KGlobal::locale()->insertCatalog( QString::fromLatin1( "libmailtransport" ) );
62 d->ui.setupUi( this );
63 d->updateButtonState();
64
65 d->ui.transportList->setContextMenuPolicy( Qt::CustomContextMenu );
66 connect( d->ui.transportList, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
67 SLOT(updateButtonState()) );
68 connect( d->ui.transportList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
69 SLOT(editClicked()) );
70 connect( d->ui.addButton, SIGNAL(clicked()), SLOT(addClicked()) );
71 connect( d->ui.editButton, SIGNAL(clicked()), SLOT(editClicked()) );
72 connect( d->ui.renameButton, SIGNAL(clicked()), SLOT(renameClicked()) );
73 connect( d->ui.removeButton, SIGNAL(clicked()), SLOT(removeClicked()) );
74 connect( d->ui.defaultButton, SIGNAL(clicked()), SLOT(defaultClicked()) );
75 connect( d->ui.transportList, SIGNAL(customContextMenuRequested(QPoint)),
76 SLOT(slotCustomContextMenuRequested(QPoint)) );
77}
78
79TransportManagementWidget::~TransportManagementWidget()
80{
81 delete d;
82}
83
84void TransportManagementWidget::Private::updateButtonState()
85{
86 // TODO figure out current item vs. selected item (in almost every function)
87 if ( !ui.transportList->currentItem() ) {
88 ui.editButton->setEnabled( false );
89 ui.renameButton->setEnabled( false );
90 ui.removeButton->setEnabled( false );
91 ui.defaultButton->setEnabled( false );
92 } else {
93 ui.editButton->setEnabled( true );
94 ui.renameButton->setEnabled( true );
95 ui.removeButton->setEnabled( true );
96 if ( ui.transportList->currentItem()->data( 0, Qt::UserRole ) ==
97 TransportManager::self()->defaultTransportId() ) {
98 ui.defaultButton->setEnabled( false );
99 } else {
100 ui.defaultButton->setEnabled( true );
101 }
102 }
103}
104
105void TransportManagementWidget::Private::addClicked()
106{
107 TransportManager::self()->showTransportCreationDialog( q );
108}
109
110void TransportManagementWidget::Private::editClicked()
111{
112 if ( !ui.transportList->currentItem() ) {
113 return;
114 }
115
116 const int currentId = ui.transportList->currentItem()->data( 0, Qt::UserRole ).toInt();
117 Transport *transport = TransportManager::self()->transportById( currentId );
118 TransportManager::self()->configureTransport( transport, q );
119}
120
121void TransportManagementWidget::Private::renameClicked()
122{
123 if ( !ui.transportList->currentItem() ) {
124 return;
125 }
126
127 ui.transportList->editItem( ui.transportList->currentItem(), 0 );
128}
129
130void TransportManagementWidget::Private::removeClicked()
131{
132 if ( !ui.transportList->currentItem() ) {
133 return;
134 }
135 const int rc =
136 KMessageBox::questionYesNo(
137 q,
138 i18n( "Do you want to remove outgoing account '%1'?",
139 ui.transportList->currentItem()->text( 0 ) ),
140 i18n( "Remove outgoing account?" ) );
141 if ( rc == KMessageBox::No ) {
142 return;
143 }
144
145 TransportManager::self()->removeTransport(
146 ui.transportList->currentItem()->data( 0, Qt::UserRole ).toInt() );
147}
148
149void TransportManagementWidget::Private::defaultClicked()
150{
151 if ( !ui.transportList->currentItem() ) {
152 return;
153 }
154
155 TransportManager::self()->setDefaultTransport(
156 ui.transportList->currentItem()->data( 0, Qt::UserRole ).toInt() );
157}
158
159void TransportManagementWidget::Private::slotCustomContextMenuRequested( const QPoint &pos )
160{
161 KMenu *menu = new KMenu( q );
162 menu->addAction( i18n( "Add..." ), q, SLOT(addClicked()) );
163 QTreeWidgetItem *item = ui.transportList->itemAt( pos );
164 if ( item ) {
165 menu->addAction( i18n( "Modify..." ), q, SLOT(editClicked()) );
166 menu->addAction( i18n( "Rename" ), q, SLOT(renameClicked()) );
167 menu->addAction( i18n( "Remove" ), q, SLOT(removeClicked()) );
168 if ( item->data( 0, Qt::UserRole ) != TransportManager::self()->defaultTransportId() ) {
169 menu->addSeparator();
170 menu->addAction( i18n( "Set as Default" ), q, SLOT(defaultClicked()) );
171 }
172 }
173 menu->exec( ui.transportList->viewport()->mapToGlobal( pos ) );
174 delete menu;
175}
176
177#include "moc_transportmanagementwidget.cpp"
178