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

List:       kde-commits
Subject:    KDE/kdepim/korganizer
From:       Sergio Luis Martins <iamsergio () gmail ! com>
Date:       2010-09-28 21:37:54
Message-ID: 20100928213754.2531BAC88E () svn ! kde ! org
[Download RAW message or body]

SVN commit 1180779 by smartins:

Port KOListView to Qt4.

 M  +1 -0      koeventview.cpp  
 M  +1 -2      koviewmanager.cpp  
 M  +1 -1      previewdialog.cpp  
 M  +1 -1      searchdialog.cpp  
 M  +22 -11    views/listview/customlistviewitem.h  
 M  +89 -55    views/listview/kolistview.cpp  
 M  +16 -6     views/listview/kolistview.h  


--- trunk/KDE/kdepim/korganizer/koeventview.cpp #1180778:1180779
@@ -170,6 +170,7 @@
   kDebug();
   const Incidence::Ptr incidence = CalendarSupport::incidence( aitem );
   if ( !incidence ) {
+    kDebug() << "Ouch, null incidence";
     return;
   }
 
--- trunk/KDE/kdepim/korganizer/koviewmanager.cpp #1180778:1180779
@@ -450,8 +450,7 @@
 void KOViewManager::showListView()
 {
   if ( !mListView ) {
-    mListView = new KOListView( mMainView->viewStack() );
-    mListView->setCalendar( mMainView->calendar() );
+    mListView = new KOListView( mMainView->calendar(), mMainView->viewStack() );
     mListView->setIdentifier( "DefaultListView" );
     addView( mListView );
   }
--- trunk/KDE/kdepim/korganizer/previewdialog.cpp #1180778:1180779
@@ -62,7 +62,7 @@
   mCalendar = MemoryCalendar::Ptr( new MemoryCalendar(
                                      KOPrefs::instance()->mTimeZoneId ) );
 
-  mListView = new KOListView( this, true );
+  mListView = new KOListView( 0, this, true );
   topLayout->addWidget( mListView );
 
   topLayout->setSpacing( spacingHint() );
--- trunk/KDE/kdepim/korganizer/searchdialog.cpp #1180778:1180779
@@ -63,7 +63,7 @@
   // Results list view
   QVBoxLayout *layout = new QVBoxLayout;
   layout->setMargin( 0 );
-  listView = new KOListView( this );
+  listView = new KOListView( m_calendarview->calendar(), this );
   listView->showDates();
   layout->addWidget( listView );
   mListViewFrame->setLayout( layout );
--- trunk/KDE/kdepim/korganizer/views/listview/customlistviewitem.h #1180778:1180779
@@ -19,29 +19,41 @@
   with any edition of Qt, and distribute the resulting executable,
   without including the source code for Qt in the source distribution.
 */
-#ifndef INCIDENCEEDITOR_CUSTOMLISTVIEWITEM_H
-#define INCIDENCEEDITOR_CUSTOMLISTVIEWITEM_H
+#ifndef CUSTOMLISTVIEWITEM_H
+#define CUSTOMLISTVIEWITEM_H
 
 #include <QMap>
 #include <QString>
-#include <K3ListView>
+#include <QTreeWidget>
+#include <QKeyEvent>
 
-namespace IncidenceEditorNG {
 
+class KOListView;
+
 template<class T>
-class CustomListViewItem : public K3ListViewItem
+// TODO, rename to CustomTreeWidgetItem
+class CustomListViewItem : public QTreeWidgetItem
 {
   public:
-    CustomListViewItem( T data, K3ListView *parent ) :
-      K3ListViewItem( parent ), mData( data ) { updateItem(); }
-    CustomListViewItem( T data, K3ListView *parent, K3ListViewItem *after ) :
-      K3ListViewItem( parent, after ), mData( data ) { updateItem(); }
+      CustomListViewItem( T data, QTreeWidget *parent, KOListView *listView ) :
+                                    QTreeWidgetItem( parent ),
+                                    mData( data ),
+                                    mListView( listView )
+      {
+        updateItem();
+      }
+
     ~CustomListViewItem() {}
 
     void updateItem() {}
 
     T data() const { return mData; }
 
+    QVariant data( int column, int role ) const
+    {
+      return QTreeWidgetItem::data( column, role );
+    }
+
     QString key( int column, bool ) const
     {
       QMap<int,QString>::ConstIterator it = mKeyMap.find(column);
@@ -59,10 +71,9 @@
 
   private:
     T mData;
+    KOListView *mListView;
 
     QMap<int,QString> mKeyMap;
 };
 
-}
-
 #endif
--- trunk/KDE/kdepim/korganizer/views/listview/kolistview.cpp #1180778:1180779
@@ -39,6 +39,7 @@
 #include <KCalCore/Visitor>
 #include <KCalCore/Journal>
 
+#include <QTreeWidget>
 #include <QBoxLayout>
 #include <QStyle>
 
@@ -67,7 +68,7 @@
 void KOListViewToolTip::maybeTip( const QPoint &pos )
 {
   QRect r;
-  Q3ListViewItem *it = eventlist->itemAt( pos );
+  QTreeWidgetItem *it = eventlist->itemAt( pos );
   KOListViewItem *i = static_cast<KOListViewItem*>( it );
 
   if ( i && KOPrefs::instance()->mEnableToolTips ) {
@@ -108,7 +109,7 @@
   mItem->setText( Summary_Column, e->summary() );
   if ( e->hasEnabledAlarms() ) {
     static const QPixmap alarmPxmp = KOGlobals::self()->smallIcon( \
                "appointment-reminder" );
-    mItem->setPixmap( Reminder_Column, alarmPxmp );
+    mItem->setIcon( Reminder_Column, alarmPxmp );
     mItem->setSortKey( Reminder_Column, "1" );
   } else {
     mItem->setSortKey( Reminder_Column, "0" );
@@ -116,7 +117,7 @@
 
   if ( e->recurs() ) {
     static const QPixmap recurPxmp = KOGlobals::self()->smallIcon( \
                "appointment-recurring" );
-    mItem->setPixmap( Recurs_Column, recurPxmp );
+    mItem->setIcon( Recurs_Column, recurPxmp );
     mItem->setSortKey( Recurs_Column, "1" );
   } else {
     mItem->setSortKey( Recurs_Column, "0" );
@@ -132,7 +133,7 @@
     eventPxmp = KOGlobals::self()->smallIcon( "view-calendar-day" );
   }
 
-  mItem->setPixmap( Summary_Column, eventPxmp );
+  mItem->setIcon( Summary_Column, eventPxmp );
 
   mItem->setText( StartDateTime_Column, IncidenceFormatter::dateTimeToString(
                     e->dtStart(), e->allDay(), true, \
CalendarSupport::KCalPrefs::instance()->timeSpec() ) ); @@ -155,11 +156,12 @@
 {
   static const QPixmap todoPxmp = KOGlobals::self()->smallIcon( \
"view-calendar-tasks" );  static const QPixmap todoDonePxmp = \
                KOGlobals::self()->smallIcon( "task-complete" );
-  mItem->setPixmap( Summary_Column, t->isCompleted() ? todoDonePxmp : todoPxmp );
+
+  mItem->setIcon( Summary_Column, t->isCompleted() ? todoDonePxmp : todoPxmp );
   mItem->setText( Summary_Column, t->summary() );
   if ( t->hasEnabledAlarms() ) {
     static const QPixmap alarmPxmp = KOGlobals::self()->smallIcon( \
                "appointment-reminder" );
-    mItem->setPixmap( Reminder_Column, alarmPxmp );
+    mItem->setIcon( Reminder_Column, alarmPxmp );
     mItem->setSortKey( Reminder_Column, "1" );
   } else {
     mItem->setSortKey( Reminder_Column, "0" );
@@ -167,7 +169,7 @@
 
   if ( t->recurs() ) {
     static const QPixmap recurPxmp = KOGlobals::self()->smallIcon( \
                "appointment-recurring" );
-    mItem->setPixmap( Recurs_Column, recurPxmp );
+    mItem->setIcon( Recurs_Column, recurPxmp );
     mItem->setSortKey( Recurs_Column, "1" );
   } else {
     mItem->setSortKey( Recurs_Column, "0" );
@@ -199,7 +201,7 @@
 bool KOListView::ListItemVisitor::visit( Journal::Ptr j )
 {
   static const QPixmap jrnalPxmp = KOGlobals::self()->smallIcon( "view-pim-journal" \
                );
-  mItem->setPixmap( Summary_Column, jrnalPxmp );
+  mItem->setIcon( Summary_Column, jrnalPxmp );
   if ( j->summary().isEmpty() ) {
     mItem->setText( Summary_Column, j->description().section( '\n', 0, 0 ) );
   } else {
@@ -213,51 +215,58 @@
   return true;
 }
 
-KOListView::KOListView( QWidget *parent,  bool nonInteractive )
+KOListView::KOListView( CalendarSupport::Calendar *calendar,
+                        QWidget *parent, bool nonInteractive )
   : KOEventView( parent )
 {
+  setCalendar( calendar );
   mActiveItem = 0;
   mIsNonInteractive = nonInteractive;
 
-  mListView = new K3ListView( this );
-  mListView->addColumn( i18n( "Summary" ) );
-  mListView->addColumn( i18n( "Reminder" ) ); // alarm set?
-  mListView->addColumn( i18n( "Recurs" ) ); // recurs?
-  mListView->addColumn( i18n( "Start Date/Time" ) );
-  mListView->setColumnAlignment( StartDateTime_Column, Qt::AlignHCenter );
-  mListView->addColumn( i18n( "End Date/Time" ) );
-  mListView->setColumnAlignment( EndDateTime_Column, Qt::AlignHCenter );
-  mListView->addColumn( i18n( "Categories" ) );
+  mListWidget = new QTreeWidget( this );
+  mListWidget->setColumnCount( 6 );
+  mListWidget->headerItem()->setText( 0, i18n( "Summary" ) );
+  mListWidget->headerItem()->setText( 1, i18n( "Reminder" ) );
+  mListWidget->headerItem()->setText( 2, i18n( "Recurs" ) );
+  mListWidget->headerItem()->setText( 3, i18n( "Start Date/Time" ) );
+  mListWidget->headerItem()->setText( 4, i18n( "End Date/Time" ) );
+  mListWidget->headerItem()->setText( 5, i18n( "Categories" ) );
 
+  mListWidget->setContextMenuPolicy( Qt::CustomContextMenu );
+
+  // mListWidget->setColumnAlignment( StartDateTime_Column, Qt::AlignHCenter );
+
+  //mListWidget->setColumnAlignment( EndDateTime_Column, Qt::AlignHCenter );
+
   QBoxLayout *layoutTop = new QVBoxLayout( this );
   layoutTop->setMargin( 0 );
-  layoutTop->addWidget( mListView );
+  layoutTop->addWidget( mListWidget );
 
   mPopupMenu = eventPopup();
+  mPopupMenu->setCalendar( this->calendar() );
+
 /*
   mPopupMenu->addSeparator();
   mPopupMenu->insertItem(i18n("Show Dates"), this,
                       SLOT(showDates()));
   mPopupMenu->insertItem(i18n("Hide Dates"), this,
                       SLOT(hideDates()));
+
 */
-
-  QObject::connect( mListView, SIGNAL(doubleClicked(Q3ListViewItem *)),
-                    SLOT(defaultItemAction(Q3ListViewItem *)) );
-  QObject::connect( mListView, SIGNAL(returnPressed(Q3ListViewItem *)),
-                    SLOT(defaultItemAction(Q3ListViewItem *)) );
-  QObject::connect( mListView,
-                    SIGNAL(rightButtonClicked(Q3ListViewItem *,const QPoint &,int)),
-                    SLOT(popupMenu(Q3ListViewItem *,const QPoint &,int)) );
-  QObject::connect( mListView, SIGNAL(selectionChanged()),
+  QObject::connect( mListWidget, SIGNAL(doubleClicked(QModelIndex)),
+                    SLOT(defaultItemAction(QModelIndex)) );
+  QObject::connect( mListWidget,
+                    SIGNAL(customContextMenuRequested(QPoint)),
+                    SLOT(popupMenu(QPoint)) );
+  QObject::connect( mListWidget, SIGNAL(itemSelectionChanged()),
                     SLOT(processSelectionChange()) );
+  // TODO
+  //mListWidget->restoreLayout( KOGlobals::self()->config(), "KOListView Layout" );
 
-  mListView->restoreLayout( KOGlobals::self()->config(), "KOListView Layout" );
-
 #ifdef __GNUC__
 #warning Port me!
 #endif
-//  new KOListViewToolTip( mListView->viewport(), mListView );
+//  new KOListViewToolTip( mListWidget->viewport(), mListWidget );
 
   mSelectedDates.append( QDate::currentDate() );
 }
@@ -280,7 +289,8 @@
 Akonadi::Item::List KOListView::selectedIncidences()
 {
   Akonadi::Item::List eventList;
-  Q3ListViewItem *item = mListView->selectedItem();
+  QTreeWidgetItem *item = mListWidget->selectedItems().isEmpty() ? 0 :
+                          mListWidget->selectedItems().first() ;
   if ( item ) {
     KOListViewItem *i = static_cast<KOListViewItem *>( item );
     eventList.append( mItems.value( i->data() ) );
@@ -301,15 +311,15 @@
   static int oldColWidth3 = 0;
 
   if ( !show ) {
-    oldColWidth1 = mListView->columnWidth( 1 );
-    oldColWidth3 = mListView->columnWidth( 3 );
-    mListView->setColumnWidth( 1, 0 );
-    mListView->setColumnWidth( 3, 0 );
+    oldColWidth1 = mListWidget->columnWidth( 1 );
+    oldColWidth3 = mListWidget->columnWidth( 3 );
+    mListWidget->setColumnWidth( 1, 0 );
+    mListWidget->setColumnWidth( 3, 0 );
   } else {
-    mListView->setColumnWidth( 1, oldColWidth1 );
-    mListView->setColumnWidth( 3, oldColWidth3 );
+    mListWidget->setColumnWidth( 1, oldColWidth1 );
+    mListWidget->setColumnWidth( 3, oldColWidth3 );
   }
-  mListView->repaint();
+  mListWidget->repaint();
 }
 
 void KOListView::showDates()
@@ -378,11 +388,13 @@
       tinc->setReadOnly( true );
     }
   }
-  KOListViewItem *item = new KOListViewItem( aitem.id(), mListView );
+  KOListViewItem *item = new KOListViewItem( aitem.id(), mListWidget, this );
   ListItemVisitor v( item );
   if ( !tinc->accept( v, tinc ) ) {
     delete item;
   }
+
+  item->setData( 0, Qt::UserRole, QVariant( aitem.id() ) );
 }
 
 void KOListView::showIncidences( const Akonadi::Item::List &incidenceList, const \
QDate &date ) @@ -447,32 +459,45 @@
 
 KOListViewItem *KOListView::getItemForIncidence( const Akonadi::Item &aitem )
 {
-  KOListViewItem *item = (KOListViewItem *)mListView->firstChild();
-  while ( item ) {
+  int index = 0;
+  while ( QTreeWidgetItem *it = mListWidget->topLevelItem( index ) ) {
+    KOListViewItem *item = static_cast<KOListViewItem *>( it );
     if ( item->data() == aitem.id() ) {
       return item;
     }
-    item = static_cast<KOListViewItem *>( item->nextSibling() );
+    ++index;
   }
+
   return 0;
 }
 
-Incidence::Ptr KOListView::incidenceForId( const Akonadi::Item::Id &id ) const
+Incidence::Ptr KOListView::incidenceForId( Akonadi::Item::Id id ) const
 {
   return CalendarSupport::incidence( mItems.value( id ) );
 }
 
-void KOListView::defaultItemAction( Q3ListViewItem *i )
+void KOListView::defaultItemAction( const QModelIndex &index )
 {
-  KOListViewItem *item = static_cast<KOListViewItem *>( i );
-  if ( item && !mIsNonInteractive ) {
-    defaultAction( mItems.value( item->data() ) );
+  if ( !mIsNonInteractive ) {
+    // Get the first column, it has our Akonadi::Id
+    const QModelIndex col0Idx = mListWidget->model()->index( index.row(), 0 );
+    Akonadi::Item::Id id = mListWidget->model()->data( col0Idx, Qt::UserRole \
).toLongLong(); +    defaultAction( mItems.value( id ) );
   }
 }
 
-void KOListView::popupMenu( Q3ListViewItem *item, const QPoint &, int )
+void KOListView::defaultItemAction( const Akonadi::Item::Id id )
 {
-  mActiveItem = static_cast<KOListViewItem *>( item );
+  if ( !mIsNonInteractive ) {
+    defaultAction( mItems.value( id ) );
+  }
+}
+
+void KOListView::popupMenu( const QPoint &point )
+{
+  mActiveItem = static_cast<KOListViewItem *>( mListWidget->itemAt( point ) );
+  kDebug() << "DEBUG mActiveItem " << mActiveItem << mIsNonInteractive;
+
   if ( mActiveItem && !mIsNonInteractive ) {
     const Akonadi::Item aitem = mItems.value( mActiveItem->data() );
     // FIXME: For recurring incidences we don't know the date of this
@@ -485,18 +510,27 @@
 
 void KOListView::readSettings( KConfig *config )
 {
-  mListView->restoreLayout( config, "KOListView Layout" );
+  Q_UNUSED( config );
+  // TODO
+  // mListWidget->restoreLayout( config, "KOListView Layout" );
 }
 
 void KOListView::writeSettings( KConfig *config )
 {
-  mListView->saveLayout( config, "KOListView Layout" );
+  Q_UNUSED( config );
+  // TODO
+  // mListWidget->saveLayout( config, "KOListView Layout" );
 }
 
 void KOListView::processSelectionChange()
 {
   if ( !mIsNonInteractive ) {
-    KOListViewItem *item = static_cast<KOListViewItem *>( mListView->selectedItem() \
); +    KOListViewItem *item;
+    if ( mListWidget->selectedItems().isEmpty() ) {
+      item = 0;
+    } else {
+      item = static_cast<KOListViewItem *>( mListWidget->selectedItems().first() );
+    }
 
     if ( !item ) {
       emit incidenceSelected( Akonadi::Item(), QDate() );
@@ -508,13 +542,13 @@
 
 void KOListView::clearSelection()
 {
-  mListView->selectAll( false );
+  mListWidget->clearSelection();
 }
 
 void KOListView::clear()
 {
   mSelectedDates.clear();
-  mListView->clear();
+  mListWidget->clear();
   mDateList.clear();
   mItems.clear();
 }
--- trunk/KDE/kdepim/korganizer/views/listview/kolistview.h #1180778:1180779
@@ -34,11 +34,18 @@
 #include <QHash>
 #include <QList>
 
+
 using namespace KCalCore;
 
-typedef IncidenceEditorNG::CustomListViewItem<Akonadi::Item::Id> KOListViewItem;
+namespace CalendarSupport {
+  class Calendar;
+}
 
+
+typedef CustomListViewItem<Akonadi::Item::Id> KOListViewItem;
+
 class KOListView;
+class QTreeWidget;
 
 #if 0
 class KOListViewToolTip : public QToolTip
@@ -68,7 +75,8 @@
 {
   Q_OBJECT
   public:
-    explicit KOListView( QWidget *parent = 0,  bool nonInteractive = false );
+  explicit KOListView( CalendarSupport::Calendar *calendar,
+                       QWidget *parent = 0,  bool nonInteractive = false );
     ~KOListView();
 
     virtual int maxDatesHint() const;
@@ -100,9 +108,11 @@
 
     void changeIncidenceDisplay( const Akonadi::Item &, int );
 
-    void defaultItemAction( Q3ListViewItem *item );
-    void popupMenu( Q3ListViewItem *item, const QPoint &, int );
+    void defaultItemAction( const QModelIndex & );
+    void defaultItemAction( const Akonadi::Item::Id id );
 
+    void popupMenu( const QPoint & );
+
   protected slots:
     void processSelectionChange();
 
@@ -112,11 +122,11 @@
 
   private:
     KOListViewItem *getItemForIncidence( const Akonadi::Item & );
-    KCalCore::Incidence::Ptr incidenceForId( const Akonadi::Item::Id &id ) const;
+    KCalCore::Incidence::Ptr incidenceForId( Akonadi::Item::Id id ) const;
 
   private:
     class ListItemVisitor;
-    K3ListView *mListView;
+    QTreeWidget *mListWidget;
     KOEventPopupMenu *mPopupMenu;
     KOListViewItem *mActiveItem;
     QHash<Akonadi::Item::Id,Akonadi::Item> mItems;


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

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