korganizer

kojournalview.cpp
00001 /*
00002     This file is part of KOrganizer.
00003     Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
00004     Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00019 
00020     As a special exception, permission is given to link this program
00021     with any edition of TQt, and distribute the resulting executable,
00022     without including the source code for TQt in the source distribution.
00023 */
00024 
00025 //
00026 // View of Journal entries
00027 
00028 #include <tqlayout.h>
00029 #include <tqpopupmenu.h>
00030 #include <tqvbox.h>
00031 #include <tqlabel.h>
00032 #include <tqscrollview.h>
00033 
00034 #include <klocale.h>
00035 #include <kdebug.h>
00036 
00037 #include <libkcal/calendar.h>
00038 
00039 #include "journalentry.h"
00040 
00041 #include "kojournalview.h"
00042 #include "koglobals.h"
00043 using namespace KOrg;
00044 
00045 KOJournalView::KOJournalView(Calendar *calendar, TQWidget *parent,
00046                        const char *name)
00047   : KOrg::BaseView(calendar, parent, name)
00048 {
00049   TQVBoxLayout*topLayout = new TQVBoxLayout( this );
00050   topLayout->setAutoAdd(true);
00051   mSV = new TQScrollView( this, "JournalScrollView" );
00052   mVBox = new TQVBox( mSV->viewport() );
00053   mSV->setVScrollBarMode( TQScrollView::Auto );
00054   mSV->setHScrollBarMode( TQScrollView::AlwaysOff );
00055   mSV->setResizePolicy( TQScrollView::AutoOneFit );
00056   mSV->addChild( mVBox );
00057 //  mVBox->setSpacing( 10 );
00058 }
00059 
00060 KOJournalView::~KOJournalView()
00061 {
00062 }
00063 
00064 void KOJournalView::appendJournal( Journal*journal, const TQDate &dt)
00065 {
00066   JournalDateEntry *entry = 0;
00067   if ( mEntries.contains( dt ) ) {
00068     entry = mEntries[dt];
00069   } else {
00070     entry = new JournalDateEntry( calendar(), mVBox );
00071     entry->setDate( dt );
00072     entry->setIncidenceChanger( mChanger );
00073     entry->show();
00074     connect( this, TQT_SIGNAL(flushEntries()),
00075              entry, TQT_SIGNAL(flushEntries()) );
00076 
00077     connect( this, TQT_SIGNAL(setIncidenceChangerSignal(IncidenceChangerBase *)),
00078              entry, TQT_SLOT(setIncidenceChanger( IncidenceChangerBase *)) );
00079 
00080     connect( this, TQT_SIGNAL(journalEdited(Journal *)),
00081              entry, TQT_SLOT(journalEdited(Journal *)) );
00082     connect( this, TQT_SIGNAL(journalDeleted(Journal *)),
00083              entry, TQT_SLOT(journalDeleted(Journal *)) );
00084 
00085     connect( entry, TQT_SIGNAL(editIncidence(Incidence *,const TQDate &)),
00086              this, TQT_SIGNAL(editIncidenceSignal(Incidence *,const TQDate &)) );
00087     connect( entry, TQT_SIGNAL(deleteIncidence(Incidence *)),
00088              this, TQT_SIGNAL(deleteIncidenceSignal(Incidence *)) );
00089 
00090     connect( entry, TQT_SIGNAL(newJournal(ResourceCalendar *,const TQString &,const TQDate &)),
00091              this, TQT_SIGNAL(newJournalSignal(ResourceCalendar *,const TQString &,const TQDate &)) );
00092     mEntries.insert( dt, entry );
00093   }
00094 
00095   if ( entry && journal ) {
00096     entry->addJournal( journal );
00097   }
00098 }
00099 
00100 int KOJournalView::currentDateCount()
00101 {
00102   return mEntries.size();
00103 }
00104 
00105 Incidence::List KOJournalView::selectedIncidences()
00106 {
00107   // We don't have a selection in the journal view.
00108   // FIXME: The currently edited journal is the selected incidence...
00109   Incidence::List eventList;
00110   return eventList;
00111 }
00112 
00113 void KOJournalView::clearEntries()
00114 {
00115 //  kdDebug(5850)<<"KOJournalView::clearEntries()"<<endl;
00116   TQMap<TQDate, JournalDateEntry*>::Iterator it;
00117   for ( it = mEntries.begin(); it != mEntries.end(); ++it ) {
00118     delete (it.data());
00119   }
00120   mEntries.clear();
00121 }
00122 void KOJournalView::updateView()
00123 {
00124   TQMap<TQDate, JournalDateEntry*>::Iterator it;
00125   for ( it = mEntries.begin(); it != mEntries.end(); ++it ) {
00126     it.data()->clear();
00127     Journal::List journals = calendar()->journals( it.key() );
00128     Journal::List::Iterator it1;
00129     for ( it1 = journals.begin(); it1 != journals.end(); ++it1 ) {
00130       it.data()->addJournal( *it1 );
00131     }
00132   }
00133 }
00134 
00135 void KOJournalView::flushView()
00136 {
00137 //  kdDebug(5850) << "KOJournalView::flushView(): "<< endl;
00138   emit flushEntries();
00139 }
00140 
00141 void KOJournalView::showDates( const TQDate &start, const TQDate &end )
00142 {
00143 //  kdDebug(5850) << "KOJournalView::showDates(): "<<start.toString().latin1()<<" - "<<end.toString().latin1() << endl;
00144   clearEntries();
00145   if ( end < start ) {
00146     return;
00147   }
00148 
00149   Journal::List::ConstIterator it;
00150   Journal::List jnls;
00151   TQDate d = start;
00152   for ( TQDate d = start; d <= end; d = d.addDays( 1 ) ) {
00153     jnls = calendar()->journals( d );
00154     for ( it = jnls.begin(); it != jnls.end(); ++it ) {
00155       appendJournal( *it, d );
00156     }
00157     if ( jnls.count() < 1 ) {
00158       // create an empty dateentry widget
00159       appendJournal( 0, d );
00160     }
00161   }
00162 }
00163 
00164 void KOJournalView::showIncidences( const Incidence::List &incidences, const TQDate & )
00165 {
00166 //  kdDebug(5850) << "KOJournalView::showIncidences(): "<< endl;
00167   clearEntries();
00168   Incidence::List::const_iterator it;
00169   for ( it = incidences.constBegin(); it != incidences.constEnd(); ++it ) {
00170     if ( (*it) && ( (*it)->type() == "Journal" ) ) {
00171       Journal *j = static_cast<Journal*>(*it);
00172       if ( j ) {
00173     appendJournal( j, j->dtStart().date() );
00174       }
00175     }
00176   }
00177 }
00178 
00179 CalPrinterBase::PrintType KOJournalView::printType()
00180 {
00181   return CalPrinterBase::Journallist;
00182 }
00183 
00184 void KOJournalView::changeIncidenceDisplay(Incidence *incidence, int action)
00185 {
00186 //  kdDebug(5850) << "KOJournalView::changeIncidenceDisplay(): "<< endl;
00187   Journal *journal = dynamic_cast<Journal*>(incidence);
00188   if (journal) {
00189     switch(action) {
00190       case KOGlobals::INCIDENCEADDED:
00191         appendJournal( journal, journal->dtStart().date() );
00192         break;
00193       case KOGlobals::INCIDENCEEDITED:
00194         emit journalEdited( journal );
00195         break;
00196       case KOGlobals::INCIDENCEDELETED:
00197         emit journalDeleted( journal );
00198         break;
00199       default:
00200         kdDebug(5850) << "KOListView::changeIncidenceDisplay(): Illegal action " << action << endl;
00201     }
00202   }
00203 }
00204 
00205 void KOJournalView::setIncidenceChanger( IncidenceChangerBase *changer )
00206 {
00207   mChanger = changer;
00208   emit setIncidenceChangerSignal( changer );
00209 }
00210 
00211 void KOJournalView::newJournal()
00212 {
00213   emit newJournalSignal( 0/*ResourceCalendar*/, TQString()/*subResource*/,
00214                          TQDate::currentDate() );
00215 }
00216 
00217 #include "kojournalview.moc"