[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdepim/akonadi/clients/akonadiconsole
From:       Volker Krause <vkrause () kde ! org>
Date:       2008-11-01 18:51:33
Message-ID: 1225565493.987136.7622.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 878755 by vkrause:

Monitor the current item and update the views if necessary. Fixes
changing the same item twice.


 M  +74 -59    browserwidget.cpp  
 M  +3 -0      browserwidget.h  


--- trunk/KDE/kdepim/akonadi/clients/akonadiconsole/browserwidget.cpp #878754:878755
@@ -34,6 +34,7 @@
 #include <akonadi/collectionfilterproxymodel.h>
 #include <akonadi/collectionpropertiesdialog.h>
 #include <akonadi/standardactionmanager.h>
+#include <akonadi/monitor.h>
 
 #include <kcal/kcalmodel.h>
 #include <kabc/kabcmodel.h>
@@ -68,7 +69,8 @@
     mItemModel( 0 ),
     mCurrentCollection( 0 ),
     mNepomukModel( 0 ),
-    mStdActionManager( 0 )
+    mStdActionManager( 0 ),
+    mMonitor( 0 )
 {
   Q_ASSERT( xmlGuiWindow );
   QVBoxLayout *layout = new QVBoxLayout( this );
@@ -159,73 +161,86 @@
     kWarning( 5265 ) << "No item found!";
   } else {
     const Item item = fetch->items().first();
-    mCurrentItem = item;
-    if ( item.hasPayload<KABC::Addressee>() ) {
-      const KABC::Addressee addr = item.payload<KABC::Addressee>();
+    setItem( item );
+  }
+}
 
-      contentUi.addresseeView->setAddressee( addr );
-      contentUi.stack->setCurrentWidget( contentUi.addresseeViewPage );
-    } else if ( item.mimeType().startsWith( "application/x-vnd.akonadi.calendar" ) ) \
                {
-      contentUi.incidenceView->setItem( item );
-      contentUi.stack->setCurrentWidget( contentUi.incidenceViewPage );
-    } else {
-      contentUi.stack->setCurrentWidget( contentUi.unsupportedTypePage );
-    }
+void BrowserWidget::setItem( const Akonadi::Item &item )
+{
+  mCurrentItem = item;
+  if ( item.hasPayload<KABC::Addressee>() ) {
+    const KABC::Addressee addr = item.payload<KABC::Addressee>();
 
-    QByteArray data = item.payloadData();
-    contentUi.dataView->setPlainText( data );
+    contentUi.addresseeView->setAddressee( addr );
+    contentUi.stack->setCurrentWidget( contentUi.addresseeViewPage );
+  } else if ( item.mimeType().startsWith( "application/x-vnd.akonadi.calendar" ) ) {
+    contentUi.incidenceView->setItem( item );
+    contentUi.stack->setCurrentWidget( contentUi.incidenceViewPage );
+  } else {
+    contentUi.stack->setCurrentWidget( contentUi.unsupportedTypePage );
+  }
 
-    contentUi.id->setText( QString::number( item.id() ) );
-    contentUi.remoteId->setText( item.remoteId() );
-    contentUi.mimeType->setText( item.mimeType() );
-    contentUi.revision->setText( QString::number( item.revision() ) );
-    contentUi.size->setText( QString::number( item.size() ) );
-    contentUi.modificationtime->setText( item.modificationTime().toString() + ( " \
                UTC" ) );
-    QStringList flags;
-    foreach ( const Item::Flag &f, item.flags() )
-      flags << QString::fromUtf8( f );
-    contentUi.flags->setItems( flags );
+  QByteArray data = item.payloadData();
+  contentUi.dataView->setPlainText( data );
 
-    Attribute::List list = item.attributes();
-    mAttrModel = new QStandardItemModel( list.count(), 2 );
+  contentUi.id->setText( QString::number( item.id() ) );
+  contentUi.remoteId->setText( item.remoteId() );
+  contentUi.mimeType->setText( item.mimeType() );
+  contentUi.revision->setText( QString::number( item.revision() ) );
+  contentUi.size->setText( QString::number( item.size() ) );
+  contentUi.modificationtime->setText( item.modificationTime().toString() + ( " UTC" \
) ); +  QStringList flags;
+  foreach ( const Item::Flag &f, item.flags() )
+    flags << QString::fromUtf8( f );
+  contentUi.flags->setItems( flags );
+
+  Attribute::List list = item.attributes();
+  mAttrModel = new QStandardItemModel( list.count(), 2 );
+  QStringList labels;
+  labels << i18n( "Attribute" ) << i18n( "Value" );
+  mAttrModel->setHorizontalHeaderLabels( labels );
+  for ( int i = 0; i < list.count(); ++i ) {
+    QModelIndex index = mAttrModel->index( i, 0 );
+    Q_ASSERT( index.isValid() );
+    mAttrModel->setData( index, QString::fromLatin1( list[i]->type() ) );
+    index = mAttrModel->index( i, 1 );
+    Q_ASSERT( index.isValid() );
+    mAttrModel->setData( index, QString::fromLatin1( list[i]->serialized() ) );
+    mAttrModel->itemFromIndex( index )->setFlags( Qt::ItemIsEditable | \
mAttrModel->flags( index ) ); +  }
+  contentUi.attrView->setModel( mAttrModel );
+
+  Nepomuk::Resource res( item.url() );
+  delete mNepomukModel;
+  mNepomukModel = 0;
+  if ( res.isValid() ) {
+    QHash<QUrl, Nepomuk::Variant> props = res.properties();
+    mNepomukModel = new QStandardItemModel( props.count(), 2, this );
     QStringList labels;
-    labels << i18n( "Attribute" ) << i18n( "Value" );
-    mAttrModel->setHorizontalHeaderLabels( labels );
-    for ( int i = 0; i < list.count(); ++i ) {
-      QModelIndex index = mAttrModel->index( i, 0 );
+    labels << i18n( "Property" ) << i18n( "Value" );
+    mNepomukModel->setHorizontalHeaderLabels( labels );
+    int row = 0;
+    for ( QHash<QUrl, Nepomuk::Variant>::ConstIterator it = props.begin(); it != \
props.end(); ++it, ++row ) { +      QModelIndex index = mNepomukModel->index( row, 0 \
);  Q_ASSERT( index.isValid() );
-      mAttrModel->setData( index, QString::fromLatin1( list[i]->type() ) );
-      index = mAttrModel->index( i, 1 );
+      mNepomukModel->setData( index, it.key().toString() );
+      index = mNepomukModel->index( row, 1 );
       Q_ASSERT( index.isValid() );
-      mAttrModel->setData( index, QString::fromLatin1( list[i]->serialized() ) );
-      mAttrModel->itemFromIndex( index )->setFlags( Qt::ItemIsEditable | \
mAttrModel->flags( index ) ); +      mNepomukModel->setData( index, \
it.value().toString() );  }
-    contentUi.attrView->setModel( mAttrModel );
+    contentUi.nepomukView->setEnabled( true );
+  } else {
+    contentUi.nepomukView->setEnabled( false );
+  }
+  contentUi.nepomukView->setModel( mNepomukModel );
 
-    Nepomuk::Resource res( item.url() );
-    delete mNepomukModel;
-    mNepomukModel = 0;
-    if ( res.isValid() ) {
-      QHash<QUrl, Nepomuk::Variant> props = res.properties();
-      mNepomukModel = new QStandardItemModel( props.count(), 2, this );
-      QStringList labels;
-      labels << i18n( "Property" ) << i18n( "Value" );
-      mNepomukModel->setHorizontalHeaderLabels( labels );
-      int row = 0;
-      for ( QHash<QUrl, Nepomuk::Variant>::ConstIterator it = props.begin(); it != \
                props.end(); ++it, ++row ) {
-        QModelIndex index = mNepomukModel->index( row, 0 );
-        Q_ASSERT( index.isValid() );
-        mNepomukModel->setData( index, it.key().toString() );
-        index = mNepomukModel->index( row, 1 );
-        Q_ASSERT( index.isValid() );
-        mNepomukModel->setData( index, it.value().toString() );
-      }
-      contentUi.nepomukView->setEnabled( true );
-    } else {
-      contentUi.nepomukView->setEnabled( false );
-    }
-    contentUi.nepomukView->setModel( mNepomukModel );
-  }
+  if ( mMonitor )
+    mMonitor->deleteLater(); // might be the one calling us
+  mMonitor = new Monitor( this );
+  mMonitor->setItemMonitored( item );
+  mMonitor->itemFetchScope().fetchFullPayload();
+  mMonitor->itemFetchScope().fetchAllAttributes();
+  connect( mMonitor, SIGNAL(itemChanged(Akonadi::Item,QSet<QByteArray>)), \
SLOT(setItem(Akonadi::Item)) );  }
 
 void BrowserWidget::modelChanged()
--- trunk/KDE/kdepim/akonadi/clients/akonadiconsole/browserwidget.h #878754:878755
@@ -41,6 +41,7 @@
 class ItemModel;
 class Job;
 class StandardActionManager;
+class Monitor;
 }
 
 class BrowserWidget: public QWidget
@@ -59,6 +60,7 @@
     void saveResult( KJob* job );
     void addAttribute();
     void delAttribute();
+    void setItem( const Akonadi::Item &item );
 
   private:
     Akonadi::CollectionModel *mCollectionModel;
@@ -71,6 +73,7 @@
     QStandardItemModel *mAttrModel;
     QStandardItemModel *mNepomukModel;
     Akonadi::StandardActionManager *mStdActionManager;
+    Akonadi::Monitor *mMonitor;
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic