[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