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
00035
#include <dcopref.h>
00036
00037
#include <libkcal/event.h>
00038
#include <libkcal/resourcecalendar.h>
00039
#include <libkcal/resourcelocal.h>
00040
#include <libkcal/todo.h>
00041
00042
#include "core.h"
00043
#include "plugin.h"
00044
00045
#include "summarywidget.h"
00046
00047 SummaryWidget::SummaryWidget(
Kontact::Plugin* plugin, QWidget *parent,
00048
const char *name )
00049 : Kontact::
Summary( parent, name ), mPlugin(plugin), mLayout( 0 )
00050 {
00051 mMainLayout =
new QVBoxLayout(
this, 3, 3 );
00052
00053 QPixmap icon = KGlobal::iconLoader()->loadIcon(
"korganizer",
00054 KIcon::Desktop, KIcon::SizeMedium );
00055 QWidget *header =
createHeader(
this, icon, i18n(
"Appointments" ) );
00056 mMainLayout->addWidget(header);
00057
00058 KConfig config(
"korganizerrc" );
00059 mCalendar =
new KCal::CalendarResources( config.readEntry(
"TimeZoneId" ) );
00060 KCal::CalendarResourceManager *manager = mCalendar->resourceManager();
00061
if ( manager->isEmpty() ) {
00062 config.setGroup(
"General");
00063 QString fileName = config.readPathEntry(
"Active Calendar" );
00064
00065 QString resourceName;
00066
if ( fileName.isEmpty() ) {
00067 fileName = locateLocal(
"data",
"korganizer/std.ics" );
00068 resourceName = i18n(
"Default KOrganizer resource");
00069 }
else {
00070 resourceName = i18n(
"Active Calendar");
00071 }
00072
00073 KCal::ResourceCalendar *defaultResource =
00074
new KCal::ResourceLocal( fileName );
00075
00076 defaultResource->setResourceName( resourceName );
00077
00078 manager->add( defaultResource );
00079 manager->setStandardResource( defaultResource );
00080 }
00081
00082 connect( mCalendar, SIGNAL( calendarChanged() ), SLOT( updateView() ) );
00083
00084 updateView();
00085 show();
00086 }
00087
00088
void SummaryWidget::updateView()
00089 {
00090
00091
delete mLayout;
00092
00093 mLabels.setAutoDelete(
true );
00094 mLabels.clear();
00095 mLabels.setAutoDelete(
false );
00096
00097 mLayout =
new QGridLayout( 7, 5, 3 );
00098 mMainLayout->addLayout( mLayout );
00099 mLayout->setRowStretch( 6, 1 );
00100
00101 KIconLoader loader(
"korganizer" );
00102
00103 QLabel *label = 0;
00104
int counter = 0;
00105 KCal::Event::List events = mCalendar->events( QDate::currentDate(),
true );
00106
if ( events.count() > 0 ) {
00107 QPixmap pm = loader.loadIcon(
"appointment", KIcon::Small );
00108
00109 KCal::Event::List::ConstIterator it2;
00110
for( it2 = events.begin(); it2 != events.end() && counter < 5; ++it2 ) {
00111 KCal::Event *ev = *it2;
00112
if ( !ev->recurrence()->doesRecur() || ev->recursOn( QDate::currentDate() ) ) {
00113
if ( !ev->doesFloat() ) {
00114 label =
new QLabel(
this );
00115 label->setPixmap( pm );
00116 label->setMaximumSize( label->sizeHint() );
00117 mLayout->addWidget( label, counter, 0 );
00118 mLabels.append( label );
00119
00120 QString date = ev->dtStartTimeStr() +
" - " + ev->dtEndTimeStr();
00121 label =
new QLabel( date,
this );
00122 mLayout->addWidget( label, counter, 1 );
00123 mLabels.append( label );
00124
00125 KURLLabel *urlLabel =
new KURLLabel( ev->uid(), ev->summary(),
this );
00126 mLayout->addWidget( urlLabel, counter, 2 );
00127 mLabels.append( urlLabel );
00128
00129 connect( urlLabel, SIGNAL( leftClickedURL(
const QString& ) ),
00130
this, SLOT( selectEvent(
const QString& ) ) );
00131
00132 counter++;
00133 }
00134 }
00135 }
00136 }
00137
else {
00138 QLabel *noEvents =
new QLabel( i18n(
"No appointments pending"),
this );
00139 noEvents->setAlignment( AlignRight );
00140 mLayout->addWidget( noEvents, 0, 2 );
00141 mLabels.append(noEvents);
00142 }
00143
00144 KCal::Todo::List todos = mCalendar->todos();
00145
if ( todos.count() > 0 ) {
00146 QPixmap pm = loader.loadIcon(
"todo", KIcon::Small );
00147 KCal::Todo::List::ConstIterator it;
00148
for( it = todos.begin(); it != todos.end(); ++it ) {
00149 KCal::Todo *todo = *it;
00150
if ( todo->hasDueDate() && todo->dtDue().date() == QDate::currentDate() && !todo->isCompleted() ) {
00151 label =
new QLabel(
this );
00152 label->setPixmap( pm );
00153 mLayout->addWidget( label, counter, 0 );
00154 mLabels.append( label );
00155
00156 KURLLabel *urlLabel =
new KURLLabel( todo->uid(), todo->summary(),
this );
00157 mLayout->addWidget( urlLabel, counter, 2 );
00158 mLabels.append( urlLabel );
00159
00160 connect( urlLabel, SIGNAL( leftClickedURL(
const QString& ) ),
00161
this, SLOT( selectEvent(
const QString& ) ) );
00162
00163 counter++;
00164 }
00165 }
00166 }
00167
00168 }
00169
00170
void SummaryWidget::selectEvent(
const QString & )
00171 {
00172
if ( !mPlugin->isRunningStandalone() )
00173 mPlugin->core()->selectPlugin( mPlugin );
00174
else
00175 mPlugin->bringToForeground();
00176
00177
00178
00179
00180
00181 }
00182
00183
#include "summarywidget.moc"