IdentityListView is derived from QTreeWidget now

svn path=/trunk/KDE/kdepim/; revision=656425
wilder-work
Mathias Soeken 19 years ago
parent d0be23e3d1
commit 7297a82d29
  1. 107
      configuredialog.cpp
  2. 5
      configuredialog_p.h
  3. 80
      identitylistview.cpp
  4. 25
      identitylistview.h

@ -317,14 +317,14 @@ IdentityPage::IdentityPage( const KComponentData &instance, QWidget *parent, con
hlay->setMargin( 0 );
mIdentityList = new IdentityListView( this );
connect( mIdentityList, SIGNAL(selectionChanged()),
connect( mIdentityList, SIGNAL(itemSelectionChanged()),
SLOT(slotIdentitySelectionChanged()) );
connect( mIdentityList, SIGNAL(itemRenamed(Q3ListViewItem*,const QString&,int)),
SLOT(slotRenameIdentity(Q3ListViewItem*,const QString&,int)) );
connect( mIdentityList, SIGNAL(doubleClicked(Q3ListViewItem*,const QPoint&,int)),
connect( mIdentityList, SIGNAL(rename(KMail::IdentityListViewItem*, const QString&)),
SLOT(slotRenameIdentity(KMail::IdentityListViewItem*, const QString&)) );
connect( mIdentityList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
SLOT(slotModifyIdentity()) );
connect( mIdentityList, SIGNAL(contextMenu(K3ListView*,Q3ListViewItem*,const QPoint&)),
SLOT(slotContextMenu(K3ListView*,Q3ListViewItem*,const QPoint&)) );
connect( mIdentityList, SIGNAL(contextMenu(KMail::IdentityListViewItem*, const QPoint&)),
SLOT(slotContextMenu(KMail::IdentityListViewItem*, const QPoint&)) );
// ### connect dragged(...), ...
hlay->addWidget( mIdentityList, 1 );
@ -371,10 +371,12 @@ void IdentityPage::load()
mOldNumberOfIdentities = im->shadowIdentities().count();
// Fill the list:
mIdentityList->clear();
Q3ListViewItem * item = 0;
QTreeWidgetItem * item = 0;
for ( KPIM::IdentityManager::Iterator it = im->modifyBegin() ; it != im->modifyEnd() ; ++it )
item = new IdentityListViewItem( mIdentityList, item, *it );
mIdentityList->setSelected( mIdentityList->currentItem(), true );
if (mIdentityList->currentItem()) {
mIdentityList->currentItem()->setSelected( true );
}
}
void IdentityPage::save() {
@ -383,7 +385,7 @@ void IdentityPage::save() {
kmkernel->identityManager()->sort();
kmkernel->identityManager()->commit();
if( mOldNumberOfIdentities < 2 && mIdentityList->childCount() > 1 ) {
if( mOldNumberOfIdentities < 2 && mIdentityList->topLevelItemCount() > 1 ) {
// have more than one identity, so better show the combo in the
// composer now:
KConfigGroup composer( KMKernel::config(), "Composer" );
@ -392,7 +394,7 @@ void IdentityPage::save() {
composer.writeEntry( "headers", showHeaders );
}
// and now the reverse
if( mOldNumberOfIdentities > 1 && mIdentityList->childCount() < 2 ) {
if( mOldNumberOfIdentities > 1 && mIdentityList->topLevelItemCount() < 2 ) {
// have only one identity, so remove the combo in the composer:
KConfigGroup composer( KMKernel::config(), "Composer" );
int showHeaders = composer.readEntry( "headers", HDR_STANDARD );
@ -435,12 +437,23 @@ void IdentityPage::slotNewIdentity()
// Insert into listview:
//
KPIM::Identity & newIdent = im->modifyIdentityForName( identityName );
Q3ListViewItem * item = mIdentityList->selectedItem();
if ( item )
item = item->itemAbove();
mIdentityList->setSelected( new IdentityListViewItem( mIdentityList,
/*after*/ item,
newIdent ), true );
QTreeWidgetItem * item = 0L;
if (mIdentityList->selectedItems().size() > 0) {
item = mIdentityList->selectedItems()[0];
}
QTreeWidgetItem * newItem = 0L;
if ( item ) {
newItem = new IdentityListViewItem( mIdentityList, mIdentityList->itemAbove(item), newIdent );
} else {
newItem = new IdentityListViewItem( mIdentityList, newIdent );
}
mIdentityList->selectionModel()->clearSelection();
if (newItem) {
newItem->setSelected( true );
}
slotModifyIdentity();
}
}
@ -448,8 +461,10 @@ void IdentityPage::slotNewIdentity()
void IdentityPage::slotModifyIdentity() {
assert( !mIdentityDialog );
IdentityListViewItem * item =
dynamic_cast<IdentityListViewItem*>( mIdentityList->selectedItem() );
IdentityListViewItem * item = 0L;
if (mIdentityList->selectedItems().size() > 0) {
item = dynamic_cast<IdentityListViewItem*>( mIdentityList->selectedItems()[0] );
}
if ( !item ) return;
mIdentityDialog = new IdentityDialog( this );
@ -474,8 +489,10 @@ void IdentityPage::slotRemoveIdentity()
kFatal( im->shadowIdentities().count() < 2 )
<< "Attempted to remove the last identity!" << endl;
IdentityListViewItem * item =
dynamic_cast<IdentityListViewItem*>( mIdentityList->selectedItem() );
IdentityListViewItem * item = 0L;
if (mIdentityList->selectedItems().size() > 0) {
item = dynamic_cast<IdentityListViewItem*>( mIdentityList->selectedItems()[0] );
}
if ( !item ) return;
QString msg = i18n("<qt>Do you really want to remove the identity named "
@ -484,7 +501,9 @@ void IdentityPage::slotRemoveIdentity()
KGuiItem(i18n("&Remove"),"edit-delete") ) == KMessageBox::Continue )
if ( im->removeIdentity( item->identity().identityName() ) ) {
delete item;
mIdentityList->setSelected( mIdentityList->currentItem(), true );
if (mIdentityList->currentItem()) {
mIdentityList->currentItem()->setSelected( true );
}
refreshList();
}
}
@ -492,21 +511,20 @@ void IdentityPage::slotRemoveIdentity()
void IdentityPage::slotRenameIdentity() {
assert( !mIdentityDialog );
Q3ListViewItem * item = mIdentityList->selectedItem();
QTreeWidgetItem * item = 0L;
if (mIdentityList->selectedItems().size() > 0) {
item = mIdentityList->selectedItems()[0];
}
if ( !item ) return;
mIdentityList->rename( item, 0 );
mIdentityList->editItem( item );
}
void IdentityPage::slotRenameIdentity( Q3ListViewItem * i,
const QString & s, int col ) {
assert( col == 0 );
Q_UNUSED( col );
IdentityListViewItem * item = dynamic_cast<IdentityListViewItem*>( i );
void IdentityPage::slotRenameIdentity( KMail::IdentityListViewItem *item , const QString& text ) {
if ( !item ) return;
QString newName = s.trimmed();
QString newName = text.trimmed();
if ( !newName.isEmpty() &&
!kmkernel->identityManager()->shadowIdentities().contains( newName ) ) {
KPIM::Identity & ident = item->identity();
@ -516,15 +534,12 @@ void IdentityPage::slotRenameIdentity( Q3ListViewItem * i,
item->redisplay();
}
void IdentityPage::slotContextMenu( K3ListView *, Q3ListViewItem * i,
const QPoint & pos ) {
IdentityListViewItem * item = dynamic_cast<IdentityListViewItem*>( i );
void IdentityPage::slotContextMenu( IdentityListViewItem *item, const QPoint& pos ) {
QMenu * menu = new QMenu( this );
menu->addAction( i18n("Add..."), this, SLOT(slotNewIdentity()) );
if ( item ) {
menu->addAction( i18n("Modify..."), this, SLOT(slotModifyIdentity()) );
if ( mIdentityList->childCount() > 1 )
if ( mIdentityList->topLevelItemCount() > 1 )
menu->addAction( i18n("Remove"), this, SLOT(slotRemoveIdentity()) );
if ( !item->identity().isDefault() )
menu->addAction( i18n("Set as Default"), this, SLOT(slotSetAsDefault()) );
@ -537,8 +552,10 @@ void IdentityPage::slotContextMenu( K3ListView *, Q3ListViewItem * i,
void IdentityPage::slotSetAsDefault() {
assert( !mIdentityDialog );
IdentityListViewItem * item =
dynamic_cast<IdentityListViewItem*>( mIdentityList->selectedItem() );
IdentityListViewItem * item = 0L;
if (mIdentityList->selectedItems().size() > 0) {
item = dynamic_cast<IdentityListViewItem*>( mIdentityList->selectedItems()[0] );
}
if ( !item ) return;
KPIM::IdentityManager * im = kmkernel->identityManager();
@ -547,21 +564,23 @@ void IdentityPage::slotSetAsDefault() {
}
void IdentityPage::refreshList() {
for ( Q3ListViewItemIterator it( mIdentityList ) ; it.current() ; ++it ) {
IdentityListViewItem * item =
dynamic_cast<IdentityListViewItem*>(it.current());
if ( item )
for (int i = 0; i < mIdentityList->topLevelItemCount(); ++i) {
IdentityListViewItem * item = dynamic_cast<IdentityListViewItem*>( mIdentityList->topLevelItem(i) );
if (item) {
item->redisplay();
}
}
emit changed(true);
}
void IdentityPage::slotIdentitySelectionChanged()
{
IdentityListViewItem *item =
dynamic_cast<IdentityListViewItem*>( mIdentityList->selectedItem() );
IdentityListViewItem *item = 0L;
if (mIdentityList->selectedItems().size() > 0) {
item = dynamic_cast<IdentityListViewItem*>( mIdentityList->selectedItems()[0] );
}
mRemoveButton->setEnabled( item && mIdentityList->childCount() > 1 );
mRemoveButton->setEnabled( item && mIdentityList->topLevelItemCount() > 1 );
mModifyButton->setEnabled( item );
mRenameButton->setEnabled( item );
mSetAsDefaultButton->setEnabled( item && !item->identity().isDefault() );

@ -60,6 +60,7 @@ namespace Kpgp {
namespace KMail {
class IdentityDialog;
class IdentityListView;
class IdentityListViewItem;
class AccountComboBox;
class FolderRequester;
}
@ -303,8 +304,8 @@ private slots:
void slotRenameIdentity();
/** connected to @p mIdentityList's renamed() signal. Validates the
new name and sets it in the KPIM::IdentityManager */
void slotRenameIdentity( Q3ListViewItem *, const QString &, int );
void slotContextMenu( K3ListView*, Q3ListViewItem *, const QPoint & );
void slotRenameIdentity( KMail::IdentityListViewItem*, const QString& );
void slotContextMenu( KMail::IdentityListViewItem*, const QPoint& );
void slotSetAsDefault();
void slotIdentitySelectionChanged();

@ -41,6 +41,7 @@
#include <klocale.h> // i18n
#include <kiconloader.h> // SmallIcon
#include <QHeaderView>
#include <cassert>
#include <QDropEvent>
@ -54,19 +55,19 @@ namespace KMail {
//
IdentityListViewItem::IdentityListViewItem( IdentityListView * parent, const KPIM::Identity & ident )
: K3ListViewItem( parent ), mUOID( ident.uoid() ) {
: QTreeWidgetItem( parent ), mUOID( ident.uoid() ) {
init( ident );
}
IdentityListViewItem::IdentityListViewItem( IdentityListView * parent, Q3ListViewItem * after, const KPIM::Identity & ident )
: K3ListViewItem( parent, after ), mUOID( ident.uoid() ) {
IdentityListViewItem::IdentityListViewItem( IdentityListView * parent, QTreeWidgetItem * after, const KPIM::Identity & ident )
: QTreeWidgetItem( parent, after ), mUOID( ident.uoid() ) {
init( ident );
}
KPIM::Identity & IdentityListViewItem::identity() const {
KPIM::IdentityManager * im = kmkernel->identityManager();
assert( im );
return im->modifyIdentityForUoid( uoid() );
return im->modifyIdentityForUoid( mUOID );
}
void IdentityListViewItem::setIdentity( const KPIM::Identity & ident ) {
@ -97,34 +98,67 @@ namespace KMail {
//
IdentityListView::IdentityListView( QWidget * parent )
: K3ListView( parent )
: QTreeWidget( parent )
{
setFullWidth( true );
setDragEnabled( true );
setAcceptDrops( true );
setDropVisualizer( true );
addColumn( i18n("Identity Name") );
addColumn( i18n("Email Address") );
setHeaderLabels( QStringList() << i18n("Identity Name") << i18n("Email Address") );
setRootIsDecorated( false );
setRenameable( 0 );
setItemsRenameable( true );
// setShowToolTips( true );
setItemsMovable( false );
header()->setMovable( false );
setAllColumnsShowFocus( true );
setSorting( -1 ); // disabled
setSelectionModeExt( Single ); // ### Extended would be nicer...
setSortingEnabled( false ); // disabled
setSelectionMode( SingleSelection ); // ### Extended would be nicer...
setContextMenuPolicy( Qt::CustomContextMenu );
connect( this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(slotCustomContextMenuRequested(const QPoint&)) );
}
void IdentityListView::editItem( QTreeWidgetItem *item, int column )
{
if (column == 0 && item) {
IdentityListViewItem *lvItem = dynamic_cast<IdentityListViewItem*>( item );
if (lvItem) {
KPIM::Identity& ident = lvItem->identity();
if (ident.isDefault()) {
lvItem->setText( 0, ident.identityName() );
}
}
Qt::ItemFlags oldFlags = item->flags();
item->setFlags( oldFlags | Qt::ItemIsEditable );
QTreeWidget::editItem( item, 0 );
item->setFlags( oldFlags );
}
}
void IdentityListView::rename( Q3ListViewItem * i, int col ) {
if ( col == 0 && isRenameable( col ) ) {
IdentityListViewItem * item = dynamic_cast<IdentityListViewItem*>( i );
if ( item ) {
KPIM::Identity & ident = item->identity();
if ( ident.isDefault() )
item->setText( 0, ident.identityName() );
void IdentityListView::commitData( QWidget *editor )
{
kDebug() << "after editing" << endl;
if (selectedItems().size() > 0) {
IdentityListViewItem *item = dynamic_cast<IdentityListViewItem*>( selectedItems()[0] );
QLineEdit *edit = dynamic_cast<QLineEdit*>( editor );
if (edit) {
QString text = edit->text();
emit rename( item, text );
}
}
}
void IdentityListView::slotCustomContextMenuRequested( const QPoint& pos )
{
kDebug() << "position: " << pos << endl;
QTreeWidgetItem * item = itemAt( pos );
kDebug() << "item: " << item << endl;
if (item) {
IdentityListViewItem * lvItem = dynamic_cast<IdentityListViewItem*>( item );
if (lvItem) {
emit contextMenu( lvItem, viewport()->mapToGlobal(pos) );
}
} else {
emit contextMenu( 0L, viewport()->mapToGlobal(pos) );
}
K3ListView::rename( i, col );
}
bool IdentityListView::acceptDrag( QDropEvent * e ) const {

@ -32,8 +32,9 @@
#ifndef __KMAIL_IDENTITYLIST_H__
#define __KMAIL_IDENTITYLIST_H__
#include <k3listview.h>
//Added by qt3to4:
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <Q3DragObject>
#include <QDropEvent>
namespace KPIM { class Identity; }
@ -44,14 +45,14 @@ namespace KMail {
class IdentityListView;
/** @short A QListViewItem for use in IdentityListView
/** @short A QWidgetTreeItem for use in IdentityListView
@author Marc Mutz <mutz@kde.org>
**/
class IdentityListViewItem : public K3ListViewItem {
class IdentityListViewItem : public QTreeWidgetItem {
public:
IdentityListViewItem( IdentityListView * parent,
const KPIM::Identity & ident );
IdentityListViewItem( IdentityListView * parent, Q3ListViewItem * after,
IdentityListViewItem( IdentityListView * parent, QTreeWidgetItem * after,
const KPIM::Identity & ident );
uint uoid() const { return mUOID; }
@ -68,14 +69,24 @@ namespace KMail {
/** @short A listview for KPIM::Identity
@author Marc Mutz <mutz@kde.org>
**/
class IdentityListView : public K3ListView {
class IdentityListView : public QTreeWidget {
Q_OBJECT
public:
IdentityListView( QWidget * parent=0 );
virtual ~IdentityListView() {}
public:
void editItem( QTreeWidgetItem *item, int column = 0 );
protected slots:
void commitData( QWidget *editor );
public slots:
void rename( Q3ListViewItem *, int );
void slotCustomContextMenuRequested( const QPoint& );
signals:
void contextMenu( KMail::IdentityListViewItem*, const QPoint& );
void rename( KMail::IdentityListViewItem*, const QString& );
protected:
bool acceptDrag( QDropEvent * ) const;

Loading…
Cancel
Save