From b9aad1f15dc600e4dbe4c62d3fcced6363188ba3 Mon Sep 17 00:00:00 2001 From: zautrix Date: Sat, 26 Jun 2004 19:01:18 +0000 Subject: Initial revision --- (limited to 'korganizer/koeventviewer.cpp') diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp new file mode 100644 index 0000000..9f8bd9b --- a/dev/null +++ b/korganizer/koeventviewer.cpp @@ -0,0 +1,510 @@ +/* + This file is part of KOrganizer. + Copyright (c) 2001 Cornelius Schumacher + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "koprefs.h" + +#include +#include + +#ifndef KORG_NODCOP +#include +#include "korganizer.h" +#include "koprefs.h" +#include "actionmanager.h" +#endif + +#include "koeventviewer.h" +#include "koeventviewer.moc" +#ifndef KORG_NOKABC +#include +#define size count +#endif +KOEventViewer::KOEventViewer(QWidget *parent,const char *name) + : QTextBrowser(parent,name) +{ + mSyncMode = false; + mColorMode = 0; +} + +KOEventViewer::~KOEventViewer() +{ +} + +void KOEventViewer::setSource(const QString& n) +{ + KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); + KABC::AddressBook::Iterator it; + for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { + // LR I do not understand, why the uid string is different on zaurus and desktop +#ifdef DESKTOP_VERSION + QString uid = "uid://"+(*it).uid(); +#else + QString uid = "uid:"+(*it).uid(); +#endif + //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); + if (n == uid ) { + //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); + QDialog dia( this,"dia123", true ); + dia.setCaption( i18n("Details of attendee") ); + QVBoxLayout lay ( &dia ); + KPIM::AddresseeView av ( &dia ); + av.setAddressee( (*it) ); + lay.addWidget( &av ); + if ( QApplication::desktop()->width() < 480 ) + dia.resize( 220, 240); + else { + dia.resize( 400,400); + + } + dia.exec(); + break; + } + } + + +#ifndef KORG_NODCOP + kdDebug() << "KOEventViewer::setSource(): " << n << endl; + QString tmpStr; + if (n.startsWith("mailto:")) { + KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); + //emit showIncidence(n); + return; + } else if (n.startsWith("uid:")) { + DCOPClient *client = KApplication::kApplication()->dcopClient(); + const QByteArray noParamData; + const QByteArray paramData; + QByteArray replyData; + QCString replyTypeStr; +#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) + bool foundAbbrowser = PING_ABBROWSER; + + if (foundAbbrowser) { + //KAddressbook is already running, so just DCOP to it to bring up the contact editor + //client->send("kaddressbook","KAddressBookIface", + QDataStream arg(paramData, IO_WriteOnly); + arg << n.mid(6); + client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); + return; + } else { + /* + KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. + We start it without its main interface + */ + KIconLoader* iconLoader = new KIconLoader(); + QString iconPath = iconLoader->iconPath("go",KIcon::Small); + ActionManager::setStartedKAddressBook(true); + tmpStr = "kaddressbook --editor-only --uid "; + tmpStr += KProcess::quote(n.mid(6)); + KRun::runCommand(tmpStr,"KAddressBook",iconPath); + return; + } + } else { + //QTextBrowser::setSource(n); + } +#endif +} + +void KOEventViewer::addTag(const QString & tag,const QString & text) +{ + int number=text.contains("\n"); + QString str = "<" + tag + ">"; + QString tmpText=text; + QString tmpStr=str; + if(number !=-1) + { + if (number > 0) { + int pos=0; + QString tmp; + for(int i=0;i<=number;i++) { + pos=tmpText.find("\n"); + tmp=tmpText.left(pos); + tmpText=tmpText.right(tmpText.length()-pos-1); + tmpStr+=tmp+"
"; + } + } + else tmpStr += tmpText; + tmpStr+=""; + mText.append(tmpStr); + } + else + { + str += text + ""; + mText.append(str); + } +} + +void KOEventViewer::setColorMode( int m ) +{ + mColorMode = m; +} +void KOEventViewer::appendEvent(Event *event, int mode ) +{ + mCurrentIncidence = event; + bool shortDate = KOPrefs::instance()->mShortDateInViewer; + topLevelWidget()->setCaption(i18n("Event Viewer")); + if ( mode == 0 ) { + addTag("h2",event->summary()); + } + else { + if ( mColorMode == 1 ) { + mText +=""; + } + if ( mColorMode == 2 ) { + mText +=""; + } + // mText +="" + i18n("O-due!") + ""; + if ( mode == 1 ) { + addTag("h2",i18n( "Local: " ) +event->summary()); + } else { + addTag("h2",i18n( "Remote: " ) +event->summary()); + } + addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); + if ( mColorMode ) + mText += ""; + } + if (event->cancelled ()) { + mText +=""; + addTag("i",i18n("This event has been cancelled!")); + mText.append("
"); + mText += "
"; + } + if (!event->location().isEmpty()) { + addTag("b",i18n("Location: ")); + mText.append(event->location()+"
"); + } + if (event->doesFloat()) { + if (event->isMultiDay()) { + mText.append(i18n("

From: %1

To: %2

") + .arg(event->dtStartDateStr(shortDate)) + .arg(event->dtEndDateStr(shortDate))); + } else { + mText.append(i18n("

On: %1

").arg(event->dtStartDateStr( shortDate ))); + } + } else { + if (event->isMultiDay()) { + mText.append(i18n("

From: %1

") + .arg(event->dtStartStr( shortDate))); + mText.append(i18n("

To: %1

") + .arg(event->dtEndStr(shortDate))); + } else { + mText.append(i18n("

On: %1

") + .arg(event->dtStartDateStr( shortDate ))); + mText.append(i18n("

From: %1 To: %2

") + .arg(event->dtStartTimeStr()) + .arg(event->dtEndTimeStr())); + } + } + + if (event->recurrence()->doesRecur()) { + + QString recurText = event->recurrence()->recurrenceText(); + addTag("p","" + i18n("This is a %1 recurring event.").arg(recurText ) + ""); + bool last; + QDate start = QDate::currentDate(); + QDate next; + next = event->recurrence()->getPreviousDate( start , &last ); + if ( !last ) { + next = event->recurrence()->getNextDate( start.addDays( - 1 ) ); + addTag("p",i18n("Next recurrence is on:") ); + addTag("p", KGlobal::locale()->formatDate( next, shortDate )); + } else { + addTag("p",i18n("Last recurrence was on:") ); + addTag("p", KGlobal::locale()->formatDate( next, shortDate )); + } + } + + + if (event->isAlarmEnabled()) { + Alarm *alarm =event->alarms().first() ; + QDateTime t = alarm->time(); + int min = t.secsTo( event->dtStart() )/60; + QString s =i18n("( %1 min before )").arg( min ); + addTag("p",i18n("Alarm on: ") + s +" "); + addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); + //addTag("p",s); + } + + addTag("b",i18n("Access: ")); + mText.append(event->secrecyStr()+"
"); + if (!event->description().isEmpty()) { + addTag("p",i18n("Details: ")); + addTag("p",event->description()); + } + + formatCategories(event); + + formatReadOnly(event); + formatAttendees(event); + + setText(mText); + //QWhatsThis::add(this,mText); + +} + +void KOEventViewer::appendTodo(Todo *event, int mode ) +{ + mCurrentIncidence = event; + topLevelWidget()->setCaption(i18n("Todo Viewer")); + bool shortDate = KOPrefs::instance()->mShortDateInViewer; + if (mode == 0 ) + addTag("h2",event->summary()); + else { + if ( mColorMode == 1 ) { + mText +=""; + } + if ( mColorMode == 2 ) { + mText +=""; + } + if ( mode == 1 ) { + addTag("h2",i18n( "Local: " ) +event->summary()); + } else { + addTag("h2",i18n( "Remote: " ) +event->summary()); + } + addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); + if ( mColorMode ) + mText += ""; + } + if (event->cancelled ()) { + mText +=""; + addTag("i",i18n("This todo has been cancelled!")); + mText.append("
"); + mText += "
"; + } + + if (!event->location().isEmpty()) { + addTag("b",i18n("Location: ")); + mText.append(event->location()+"
"); + } + if (event->hasDueDate()) { + mText.append(i18n("

Due on: %1

").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); + } + addTag("b",i18n("Access: ")); + mText.append(event->secrecyStr()+"
"); + if (!event->description().isEmpty()) { + addTag("p",i18n("Details: ")); + addTag("p",event->description()); + } + + formatCategories(event); + + mText.append(i18n("

Priority: %2

") + .arg(QString::number(event->priority()))); + + mText.append(i18n("

%1 % completed

") + .arg(event->percentComplete())); + + formatReadOnly(event); + formatAttendees(event); + + setText(mText); +} + +void KOEventViewer::formatCategories(Incidence *event) +{ + if (!event->categoriesStr().isEmpty()) { + if (event->categories().count() == 1) { + addTag("h3",i18n("Category")); + } else { + addTag("h3",i18n("Categories")); + } + addTag("p",event->categoriesStr()); + } +} +void KOEventViewer::formatAttendees(Incidence *event) +{ + QPtrList attendees = event->attendees(); + if (attendees.count()) { + + + QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); + addTag("h3",i18n("Organizer")); + mText.append("
  • "); +#ifndef KORG_NOKABC + + KABC::AddressBook *add_book = KABC::StdAddressBook::self(); + KABC::Addressee::List addressList; + addressList = add_book->findByEmail(event->organizer()); + KABC::Addressee o = addressList.first(); + if (!o.isEmpty() && addressList.size()<2) { + mText += ""; + mText += o.formattedName(); + mText += "\n"; + } else { + mText.append(event->organizer()); + } +#else + mText.append(event->organizer()); +#endif + + if (iconPath) { + mText += " organizer() + "\">"; + mText += ""; + mText += "\n"; + } + mText.append("
"); + + addTag("h3",i18n("Attendees")); + Attendee *a; + mText.append(""); + } + +} +void KOEventViewer::appendJournal(Journal *jour, int mode ) +{ + bool shortDate = KOPrefs::instance()->mShortDateInViewer; + if (mode == 0 ) + addTag("h2",i18n("Journal from: ")); + else { + if ( mode == 1 ) { + addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); + } else { + addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); + } + addTag("h3",i18n( "Last modified " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); + } + topLevelWidget()->setCaption("Journal Viewer"); + mText.append(i18n("

%1

").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); + if (!jour->description().isEmpty()) { + addTag("p",jour->description()); + } + setText(mText); +} + +void KOEventViewer::formatReadOnly(Incidence *event) +{ + if (event->isReadOnly()) { + addTag("p","(" + i18n("read-only") + ")"); + } +} +void KOEventViewer::setSyncMode( bool b ) +{ + mSyncMode = b; +} + + +void KOEventViewer::setTodo(Todo *event, bool clearV ) +{ + if ( clearV ) + clearEvents(); + if ( mSyncMode ) { + if ( clearV ) + appendTodo(event,1 ); + else + appendTodo(event,2); + } else + appendTodo(event); +} +void KOEventViewer::setJournal(Journal *event, bool clearV ) +{ + if ( clearV ) + clearEvents(); + if ( mSyncMode ) { + if ( clearV ) + appendJournal(event, 1); + else + appendJournal(event, 2); + } else + appendJournal(event); +} + +void KOEventViewer::setEvent(Event *event) +{ + clearEvents(); + if ( mSyncMode ) + appendEvent(event, 1); + else + appendEvent(event); +} + +void KOEventViewer::addEvent(Event *event) +{ + if ( mSyncMode ) + appendEvent(event, 2); + else + appendEvent(event); +} + +void KOEventViewer::clearEvents(bool now) +{ + mText = ""; + if (now) setText(mText); +} + +void KOEventViewer::addText(QString text) +{ + mText.append(text); + setText(mText); +} -- cgit v0.9.0.2