kde-playground/kdepimlibs/mailtransport/transportlistview.cpp

126 lines
4 KiB
C++
Raw Normal View History

/*
Copyright (c) 2009 Constantin Berzan <exit3219@gmail.com>
Based on KMail code by:
Copyright (c) 2002 Marc Mutz <mutz@kde.org>
Copyright (c) 2007 Mathias Soeken <msoeken@tzi.de>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#include "transportlistview.h"
#include "transport.h"
#include "transportmanager.h"
#include "transporttype.h"
#include <QHeaderView>
#include <QLineEdit>
#include <KDebug>
#include <KLocalizedString>
using namespace MailTransport;
TransportListView::TransportListView( QWidget *parent )
: QTreeWidget( parent )
{
setHeaderLabels( QStringList()
<< i18nc( "@title:column email transport name", "Name" )
<< i18nc( "@title:column email transport type", "Type" ) );
setRootIsDecorated( false );
header()->setMovable( false );
header()->setResizeMode( QHeaderView::ResizeToContents );
setAllColumnsShowFocus( true );
setAlternatingRowColors( true );
setSortingEnabled( true );
sortByColumn( 0, Qt::AscendingOrder );
setSelectionMode( SingleSelection );
fillTransportList();
connect( TransportManager::self(), SIGNAL(transportsChanged()),
this, SLOT(fillTransportList()) );
}
void TransportListView::editItem( QTreeWidgetItem *item, int column )
{
// TODO: is there a nicer way to make only the 'name' column editable?
if ( column == 0 && item ) {
Qt::ItemFlags oldFlags = item->flags();
item->setFlags( oldFlags | Qt::ItemIsEditable );
QTreeWidget::editItem( item, 0 );
item->setFlags( oldFlags );
const int id = item->data( 0, Qt::UserRole ).toInt();
Transport *t = TransportManager::self()->transportById( id );
if ( !t ) {
kWarning() << "Transport" << id << "not known by manager.";
return;
}
if ( TransportManager::self()->defaultTransportId() == t->id() ) {
item->setText( 0, t->name() );
}
}
}
void TransportListView::commitData( QWidget *editor )
{
if ( selectedItems().isEmpty() ) {
// transport was deleted by someone else???
kDebug() << "No selected item.";
return;
}
QTreeWidgetItem *item = selectedItems().first();
QLineEdit *edit = dynamic_cast<QLineEdit*>( editor ); // krazy:exclude=qclasses
Q_ASSERT( edit ); // original code had if
const int id = item->data( 0, Qt::UserRole ).toInt();
Transport *t = TransportManager::self()->transportById( id );
if ( !t ) {
kWarning() << "Transport" << id << "not known by manager.";
return;
}
kDebug() << "Renaming transport" << id << "to" << edit->text();
t->setName( edit->text() );
t->forceUniqueName();
t->writeConfig();
}
void TransportListView::fillTransportList()
{
// try to preserve the selection
int selected = -1;
if ( currentItem() ) {
selected = currentItem()->data( 0, Qt::UserRole ).toInt();
}
clear();
foreach ( Transport *t, TransportManager::self()->transports() ) {
QTreeWidgetItem *item = new QTreeWidgetItem( this );
item->setData( 0, Qt::UserRole, t->id() );
QString name = t->name();
if ( TransportManager::self()->defaultTransportId() == t->id() ) {
name += i18nc( "@label the default mail transport", " (Default)" );
QFont font( item->font(0) );
font.setBold( true );
item->setFont( 0, font );
}
item->setText( 0, name );
item->setText( 1, t->transportType().name() );
if ( t->id() == selected ) {
setCurrentItem( item );
}
}
}