00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qlabel.h>
00025
#include <qlayout.h>
00026
00027
#include <kdialog.h>
00028
#include <kglobal.h>
00029
#include <kiconloader.h>
00030
#include <klocale.h>
00031
#include <kparts/part.h>
00032
#include <kstandarddirs.h>
00033
#include <kurllabel.h>
00034
#include <qtooltip.h>
00035
#include <libkcal/resourcecalendar.h>
00036
#include <libkcal/resourcelocal.h>
00037
#include <libkcal/todo.h>
00038
#include <libkdepim/kpimprefs.h>
00039
00040
#include <korganizer/stdcalendar.h>
00041
00042
#include "core.h"
00043
#include "plugin.h"
00044
#include "todoplugin.h"
00045
00046
#include "todosummarywidget.h"
00047
00048 TodoSummaryWidget::TodoSummaryWidget( TodoPlugin *plugin,
00049
QWidget *parent,
const char *name )
00050 : Kontact::
Summary( parent, name ), mPlugin( plugin )
00051 {
00052
QVBoxLayout *mainLayout =
new QVBoxLayout(
this, 3, 3 );
00053
00054
QPixmap icon = KGlobal::iconLoader()->loadIcon(
"kontact_todo",
00055 KIcon::Desktop, KIcon::SizeMedium );
00056
QWidget *header =
createHeader(
this, icon, i18n(
"Todos" ) );
00057 mainLayout->addWidget( header );
00058
00059 mLayout =
new QGridLayout( mainLayout, 7, 5, 3 );
00060 mLayout->setRowStretch( 6, 1 );
00061
00062 mCalendar = KOrg::StdCalendar::self();
00063 mCalendar->load();
00064
00065 connect( mCalendar, SIGNAL( calendarChanged() ), SLOT( updateView() ) );
00066 connect( mPlugin->core(), SIGNAL( dayChanged(
const QDate& ) ),
00067 SLOT( updateView() ) );
00068
00069 updateView();
00070 }
00071
00072
void TodoSummaryWidget::updateView()
00073 {
00074 mLabels.setAutoDelete(
true );
00075 mLabels.clear();
00076 mLabels.setAutoDelete(
false );
00077
00078 KConfig config(
"kcmkorgsummaryrc" );
00079 config.setGroup(
"Todo" );
00080
bool showAllTodos = config.readBoolEntry(
"ShowAllTodos",
false );
00081
00082 KIconLoader loader(
"korganizer" );
00083
00084
QLabel *label = 0;
00085
int counter = 0;
00086
00087 KCal::Todo::List todos = mCalendar->todos();
00088
if ( todos.count() > 0 ) {
00089
QPixmap pm = loader.loadIcon(
"todo", KIcon::Small );
00090 KCal::Todo::List::ConstIterator it;
00091
for ( it = todos.begin(); it != todos.end(); ++it ) {
00092 KCal::Todo *todo = *it;
00093
00094
bool accepted =
false;
00095
QString stateText;
00096
00097
00098
if ( showAllTodos && !todo->isCompleted())
00099 accepted = accepted ||
true;
00100
00101
00102
if ( todo->hasDueDate() && !todo->isCompleted() &&
00103 todo->dtDue().date() < QDate::currentDate() ) {
00104 accepted = accepted ||
true;
00105 stateText = i18n(
"overdue" );
00106 }
00107
00108
00109
if ( todo->hasStartDate() && todo->hasDueDate() && todo->dtStart().date()
00110 < QDate::currentDate() && QDate::currentDate() < todo->dtDue().date() ) {
00111 accepted = accepted ||
true;
00112 stateText = i18n(
"in progress" );
00113 }
00114
00115
00116
if ( todo->hasStartDate() && todo->dtStart().date() == QDate::currentDate() ) {
00117 accepted = accepted ||
true;
00118 stateText = i18n(
"starts today" );
00119 }
00120
00121
00122
if ( todo->hasDueDate() && todo->dtDue().date() == QDate::currentDate() ) {
00123 accepted = accepted ||
true;
00124 stateText = i18n(
"ends today" );
00125 }
00126
00127
if ( !accepted )
00128
continue;
00129
00130 label =
new QLabel(
this );
00131 label->setPixmap( pm );
00132 label->setMaximumSize( label->minimumSizeHint() );
00133 mLayout->addWidget( label, counter, 0 );
00134 mLabels.append( label );
00135
00136 label =
new QLabel( QString::number( todo->percentComplete() ) +
"%",
this );
00137 label->setAlignment( AlignHCenter | AlignVCenter );
00138 mLayout->addWidget( label, counter, 1 );
00139 mLabels.append( label );
00140
00141
QString sSummary = todo->summary();
00142
if ( todo->relatedTo() ) {
00143 sSummary = todo->relatedTo()->summary() +
":" + todo->summary();
00144 }
00145 KURLLabel *urlLabel =
new KURLLabel( todo->uid(), sSummary,
this );
00146 urlLabel->setTextFormat( Qt::RichText );
00147 mLayout->addWidget( urlLabel, counter, 2 );
00148 mLabels.append( urlLabel );
00149
00150
if ( !todo->description().isEmpty() ) {
00151 QToolTip::add( urlLabel, todo->description() );
00152 }
00153
00154 label =
new QLabel( stateText,
this );
00155 label->setAlignment( AlignLeft | AlignVCenter );
00156 mLayout->addWidget( label, counter, 3 );
00157 mLabels.append( label );
00158
00159 connect( urlLabel, SIGNAL( leftClickedURL(
const QString& ) ),
00160
this, SLOT( selectEvent(
const QString& ) ) );
00161
00162 counter++;
00163 }
00164 }
00165
00166
if ( counter == 0 ) {
00167 QLabel *noTodos =
new QLabel( i18n(
"No Todos pending" ),
this );
00168 noTodos->setAlignment( AlignRight );
00169 mLayout->addWidget( noTodos, 0, 2 );
00170 mLabels.append( noTodos );
00171 }
00172
00173
for ( label = mLabels.first(); label; label = mLabels.next() )
00174 label->show();
00175 }
00176
00177
void TodoSummaryWidget::selectEvent(
const QString & )
00178 {
00179 mPlugin->core()->selectPlugin(
"kontact_todoplugin" );
00180 mPlugin->interface()->showTodoView();
00181 }
00182
00183
QStringList TodoSummaryWidget::configModules()
const
00184
{
00185
return QStringList(
"kcmkorgsummary.desktop" );
00186 }
00187
00188
#include "todosummarywidget.moc"