korganizer Library API Documentation

kolistview.cpp

00001 /*
00002     This file is part of KOrganizer.
00003     Copyright (c) 1999 Preston Brown
00004     Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
00005 
00006     This program is free software; you can redistribute it and/or modify
00007     it under the terms of the GNU General Public License as published by
00008     the Free Software Foundation; either version 2 of the License, or
00009     (at your option) any later version.
00010 
00011     This program is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00014     GNU General Public License for more details.
00015 
00016     You should have received a copy of the GNU General Public License
00017     along with this program; if not, write to the Free Software
00018     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00019 
00020     As a special exception, permission is given to link this program
00021     with any edition of Qt, and distribute the resulting executable,
00022     without including the source code for Qt in the source distribution.
00023 */
00024 
00025 #include <qlistview.h>
00026 #include <qlayout.h>
00027 #include <qpopupmenu.h>
00028 
00029 #include <klocale.h>
00030 #include <kdebug.h>
00031 #include <kiconloader.h>
00032 #include <kglobal.h>
00033 
00034 #include <libkcal/calendar.h>
00035 
00036 #include "calprinter.h"
00037 #include "koglobals.h"
00038 
00039 #include "kolistview.h"
00040 #include "kolistview.moc"
00041 
00042 ListItemVisitor::ListItemVisitor(KOListViewItem *item)
00043 {
00044   mItem = item;
00045 }
00046 
00047 ListItemVisitor::~ListItemVisitor()
00048 {
00049 }
00050 
00051 bool ListItemVisitor::visit(Event *e)
00052 {
00053   mItem->setText(0,e->summary());
00054   mItem->setText(1,e->dtStartDateStr());
00055   mItem->setText(2,e->dtStartTimeStr());
00056   mItem->setText(3,e->dtEndDateStr());
00057   mItem->setText(4,e->dtEndTimeStr());
00058   mItem->setText(5,e->isAlarmEnabled() ? i18n("Yes") : i18n("No"));
00059   mItem->setText(6,e->recurrence()->doesRecur() ? i18n("Yes") : i18n("No"));
00060   mItem->setText(7,"---");
00061   mItem->setText(8,"---");
00062   mItem->setText(9,e->categoriesStr());
00063 
00064   QString key;
00065   QDate d = e->dtStart().date();
00066   QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time();
00067   key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),t.hour(),t.minute());
00068   mItem->setSortKey(1,key);
00069 
00070   d = e->dtEnd().date();
00071   t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time();
00072   key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),t.hour(),t.minute());
00073   mItem->setSortKey(3,key);
00074 
00075   return true;
00076 }
00077 
00078 bool ListItemVisitor::visit(Todo *t)
00079 {
00080   mItem->setText(0,i18n("To-Do: %1").arg(t->summary()));
00081   mItem->setText(1,"---");
00082   mItem->setText(2,"---");
00083   mItem->setText(3,"---");
00084   mItem->setText(4,"---");
00085   mItem->setText(5,"---");
00086   mItem->setText(6,"---");
00087   if (t->hasDueDate()) {
00088     mItem->setText(7,t->dtDueDateStr());
00089     if (t->doesFloat()) {
00090       mItem->setText(8,"---");
00091     } else {
00092       mItem->setText(8,t->dtDueTimeStr());
00093     }
00094   } else {
00095     mItem->setText(7,"---");
00096     mItem->setText(8,"---");
00097   }
00098   mItem->setText(9,t->categoriesStr());
00099 
00100   QString key;
00101   QDate d = t->dtDue().date();
00102   QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time();
00103   key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
00104   mItem->setSortKey(7,key);
00105 
00106   return true;
00107 }
00108 
00109 bool ListItemVisitor::visit(Journal *)
00110 {
00111   return false;
00112 }
00113 
00114 KOListView::KOListView(Calendar *calendar, QWidget *parent,
00115                        const char *name)
00116   : KOEventView(calendar, parent, name)
00117 {
00118   mActiveItem = 0;
00119 
00120   mListView = new KListView(this);
00121   mListView->addColumn(i18n("Summary"));
00122   mListView->addColumn(i18n("Start Date"));
00123   mListView->setColumnAlignment(1,AlignHCenter);
00124   mListView->addColumn(i18n("Start Time"));
00125   mListView->setColumnAlignment(2,AlignHCenter);
00126   mListView->addColumn(i18n("End Date"));
00127   mListView->setColumnAlignment(3,AlignHCenter);
00128   mListView->addColumn(i18n("End Time"));
00129   mListView->setColumnAlignment(4,AlignHCenter);
00130   mListView->addColumn(i18n("Alarm")); // alarm set?
00131   mListView->addColumn(i18n("Recurs")); // recurs?
00132   mListView->addColumn(i18n("Due Date"));
00133   mListView->setColumnAlignment(7,AlignHCenter);
00134   mListView->addColumn(i18n("Due Time"));
00135   mListView->setColumnAlignment(8,AlignHCenter);
00136   mListView->addColumn(i18n("Categories"));
00137   mListView->setColumnAlignment(9,AlignHCenter);
00138 
00139   QBoxLayout *layoutTop = new QVBoxLayout(this);
00140   layoutTop->addWidget(mListView);
00141 
00142   mPopupMenu = eventPopup();
00143 /*
00144   mPopupMenu = new QPopupMenu;
00145   mPopupMenu->insertItem(i18n("Edit Event"), this,
00146                      SLOT (editEvent()));
00147   mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this,
00148                      SLOT (deleteEvent()));
00149   mPopupMenu->insertSeparator();
00150   mPopupMenu->insertItem(i18n("Show Dates"), this,
00151                       SLOT(showDates()));
00152   mPopupMenu->insertItem(i18n("Hide Dates"), this,
00153                       SLOT(hideDates()));
00154 */
00155 
00156   QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)),
00157                    this,SLOT(defaultItemAction(QListViewItem *)));
00158   QObject::connect(mListView,SIGNAL(rightButtonClicked ( QListViewItem *,
00159                      const QPoint &, int )),
00160                    this,SLOT(popupMenu(QListViewItem *,const QPoint &,int)));
00161   QObject::connect(mListView,SIGNAL(selectionChanged()),
00162                    SLOT(processSelectionChange()));
00163 
00164 //  setMinimumSize(100,100);
00165   mListView->restoreLayout(KGlobal::config(),"KOListView Layout");
00166 }
00167 
00168 KOListView::~KOListView()
00169 {
00170   delete mPopupMenu;
00171 }
00172 
00173 int KOListView::maxDatesHint()
00174 {
00175   return 0;
00176 }
00177 
00178 int KOListView::currentDateCount()
00179 {
00180   return 0;
00181 }
00182 
00183 QPtrList<Incidence> KOListView::selectedIncidences()
00184 {
00185   QPtrList<Incidence> eventList;
00186 
00187   QListViewItem *item = mListView->selectedItem();
00188   if (item) eventList.append(((KOListViewItem *)item)->data());
00189 
00190   return eventList;
00191 }
00192 
00193 DateList KOListView::selectedDates()
00194 {
00195   DateList eventList;
00196   return eventList;
00197 }
00198 
00199 void KOListView::showDates(bool show)
00200 {
00201   // Shouldn't we set it to a value greater 0? When showDates is called with
00202   // show == true at first, then the columnwidths are set to zero.
00203   static int oldColWidth1 = 0;
00204   static int oldColWidth3 = 0;
00205 
00206   if (!show) {
00207     oldColWidth1 = mListView->columnWidth(1);
00208     oldColWidth3 = mListView->columnWidth(3);
00209     mListView->setColumnWidth(1, 0);
00210     mListView->setColumnWidth(3, 0);
00211   } else {
00212     mListView->setColumnWidth(1, oldColWidth1);
00213     mListView->setColumnWidth(3, oldColWidth3);
00214   }
00215   mListView->repaint();
00216 }
00217 
00218 void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd,
00219                                const QDate &td)
00220 {
00221 #ifndef KORG_NOPRINTER
00222   calPrinter->preview(CalPrinter::Day, fd, td);
00223 #endif
00224 }
00225 
00226 void KOListView::showDates()
00227 {
00228   showDates(true);
00229 }
00230 
00231 void KOListView::hideDates()
00232 {
00233   showDates(false);
00234 }
00235 
00236 void KOListView::updateView()
00237 {
00238   kdDebug() << "KOListView::updateView() does nothing" << endl;
00239 }
00240 
00241 void KOListView::showDates(const QDate &start, const QDate &end)
00242 {
00243   clear();
00244 
00245   QDate date = start;
00246   while( date <= end ) {
00247     addEvents(calendar()->events(date));
00248     addTodos(calendar()->todos(date));
00249     date = date.addDays( 1 );
00250   }
00251 
00252   emit incidenceSelected( 0 );
00253 }
00254 
00255 void KOListView::addEvents(QPtrList<Event> eventList)
00256 {
00257   Event *ev;
00258   for(ev = eventList.first(); ev; ev = eventList.next()) {
00259     addIncidence(ev);
00260   }
00261 }
00262 
00263 void KOListView::addTodos(QPtrList<Todo> eventList)
00264 {
00265   Todo *ev;
00266   for(ev = eventList.first(); ev; ev = eventList.next()) {
00267     addIncidence(ev);
00268   }
00269 }
00270 
00271 void KOListView::addIncidence(Incidence *incidence)
00272 {
00273   if ( mUidDict.find( incidence->uid() ) ) return;
00274   
00275   mUidDict.insert( incidence->uid(), incidence );
00276 
00277   KOListViewItem *item = new KOListViewItem( incidence, mListView );
00278   ListItemVisitor v(item);
00279   if (incidence->accept(v)) return;
00280   else delete item;
00281 }
00282 
00283 void KOListView::showEvents(QPtrList<Event> eventList)
00284 {
00285   clear();
00286 
00287   addEvents(eventList);
00288 
00289   // After new creation of list view no events are selected.
00290   emit incidenceSelected( 0 );
00291 }
00292 
00293 void KOListView::changeEventDisplay(Event *event, int action)
00294 {
00295   KOListViewItem *item;
00296 
00297   switch(action) {
00298     case KOGlobals::EVENTADDED:
00299       addIncidence( event );
00300       break;
00301     case KOGlobals::EVENTEDITED:
00302       item = getItemForEvent(event);
00303       if (item) {
00304         delete item;
00305         addIncidence( event );
00306       }
00307       break;
00308     case KOGlobals::EVENTDELETED:
00309       item = getItemForEvent(event);
00310       if (item) {
00311         delete item;
00312       }
00313       break;
00314     default:
00315       kdDebug() << "KOListView::changeEventDisplay(): Illegal action " << action << endl;
00316   }
00317 }
00318 
00319 KOListViewItem *KOListView::getItemForEvent(Event *event)
00320 {
00321   KOListViewItem *item = (KOListViewItem *)mListView->firstChild();
00322   while (item) {
00323 //    kdDebug() << "Item " << item->text(0) << " found" << endl;
00324     if (item->data() == event) return item;
00325     item = (KOListViewItem *)item->nextSibling();
00326   }
00327   return 0;
00328 }
00329 
00330 void KOListView::defaultItemAction(QListViewItem *i)
00331 {
00332   KOListViewItem *item = static_cast<KOListViewItem *>( i );
00333   if ( item ) defaultAction( item->data() );
00334 }
00335 
00336 void KOListView::popupMenu(QListViewItem *item,const QPoint &,int)
00337 {
00338   mActiveItem = (KOListViewItem *)item;
00339   if (mActiveItem) {
00340     Incidence *incidence = mActiveItem->data();
00341     if ( incidence && incidence->type() == "Event" ) {
00342       Event *event = static_cast<Event *>( incidence );
00343       mPopupMenu->showEventPopup(event);
00344     }
00345   }
00346 }
00347 
00348 void KOListView::readSettings(KConfig *config)
00349 {
00350   mListView->restoreLayout(config,"KOListView Layout");
00351 }
00352 
00353 void KOListView::writeSettings(KConfig *config)
00354 {
00355   mListView->saveLayout(config,"KOListView Layout");
00356 }
00357 
00358 void KOListView::processSelectionChange()
00359 {
00360   kdDebug() << "KOListView::processSelectionChange()" << endl;
00361 
00362   KOListViewItem *item =
00363     static_cast<KOListViewItem *>( mListView->selectedItem() );
00364 
00365   if ( !item ) {
00366     emit incidenceSelected( 0 );
00367   } else {
00368     emit incidenceSelected( item->data() );
00369   }
00370 }
00371 
00372 void KOListView::clearSelection()
00373 {
00374   mListView->selectAll( false );
00375 }
00376 
00377 void KOListView::clear()
00378 {
00379   mListView->clear();
00380   mUidDict.clear();
00381 }
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.4.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sat Oct 18 02:47:31 2003 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2001