koeventviewer.cpp
00001 /* 00002 This file is part of KOrganizer. 00003 00004 Copyright (c) 2001,2003 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., 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 #include "koeventviewer.h" 00026 #include "koglobals.h" 00027 #include "urihandler.h" 00028 00029 #include <libkcal/attachmenthandler.h> 00030 #include <libkcal/calendar.h> 00031 #include <libkcal/incidence.h> 00032 #include <libkcal/incidenceformatter.h> 00033 00034 #include <kdebug.h> 00035 #include <klocale.h> 00036 #include <kpopupmenu.h> 00037 00038 #include <tqcursor.h> 00039 #include <tqregexp.h> 00040 #include <tqtooltip.h> 00041 00042 KOEventViewer::KOEventViewer( Calendar *calendar, TQWidget *parent, const char *name ) 00043 : TQTextBrowser( parent, name ), mCalendar( calendar ), mDefaultText("") 00044 { 00045 mIncidence = 0; 00046 connect( this, TQT_SIGNAL(highlighted(const TQString &)), TQT_SLOT(message(const TQString &)) ); 00047 } 00048 00049 KOEventViewer::~KOEventViewer() 00050 { 00051 } 00052 00053 void KOEventViewer::message( const TQString &link ) 00054 { 00055 mAttachLink = TQString(); 00056 if ( link.isEmpty() ) { 00057 TQToolTip::remove( this ); 00058 return; 00059 } 00060 00061 TQString ttStr; 00062 if ( link.startsWith( "kmail:" ) ) { 00063 ttStr = i18n( "Open the message in KMail" ); 00064 } else if ( link.startsWith( "mailto:" ) ) { 00065 ttStr = i18n( "Send an email message to %1" ).arg( link.mid( 7 ) ); 00066 } else if ( link.startsWith( "uid:" ) ) { 00067 ttStr = i18n( "Lookup the contact in KAddressbook" ); 00068 } else if ( link.startsWith( "ATTACH:" ) ) { 00069 TQString tmp = link; 00070 tmp.remove( TQRegExp( "^ATTACH://" ) ); 00071 TQString uid = tmp.section( ':', 0, 0 ); 00072 TQString name = tmp.section( ':', -1, -1 ); 00073 ttStr = i18n( "View attachment \"%1\"" ).arg( name ); 00074 mAttachLink = link; 00075 } else { // no special URI, let KDE handle it 00076 ttStr = i18n( "Launch a viewer on the link" ); 00077 } 00078 00079 TQToolTip::add( this, ttStr ); 00080 } 00081 00082 void KOEventViewer::readSettings( KConfig * config ) 00083 { 00084 if ( config ) { 00085 // With each restart of KOrganizer the font site gets halfed. What should this 00086 // be good for? 00087 #if 0 00088 config->setGroup( TQString("EventViewer-%1").arg( name() ) ); 00089 int zoomFactor = config->readNumEntry("ZoomFactor", pointSize() ); 00090 zoomTo( zoomFactor/2 ); 00091 kdDebug(5850) << " KOEventViewer: restoring the pointSize: "<< pointSize() 00092 << ", zoomFactor: " << zoomFactor << endl; 00093 #endif 00094 } 00095 } 00096 00097 void KOEventViewer::writeSettings( KConfig * config ) 00098 { 00099 if ( config ) { 00100 kdDebug(5850) << " KOEventViewer: saving the zoomFactor: "<< pointSize() << endl; 00101 config->setGroup( TQString("EventViewer-%1").arg( name() ) ); 00102 config->writeEntry("ZoomFactor", pointSize() ); 00103 } 00104 } 00105 00106 void KOEventViewer::setSource( const TQString &n ) 00107 { 00108 UriHandler::process( parentWidget(), n ); 00109 } 00110 00111 bool KOEventViewer::appendIncidence( Incidence *incidence, const TQDate &date ) 00112 { 00113 addText( IncidenceFormatter::extensiveDisplayStr( mCalendar, incidence, date ) ); 00114 return true; 00115 } 00116 00117 void KOEventViewer::setCalendar( Calendar *calendar ) 00118 { 00119 mCalendar = calendar; 00120 } 00121 00122 void KOEventViewer::setIncidence( Incidence *incidence, const TQDate &date ) 00123 { 00124 clearEvents(); 00125 if( incidence ) { 00126 appendIncidence( incidence, date ); 00127 mIncidence = incidence; 00128 } else { 00129 clearEvents( true ); 00130 mIncidence = 0; 00131 } 00132 } 00133 00134 void KOEventViewer::clearEvents( bool now ) 00135 { 00136 mText = ""; 00137 if ( now ) setText( mDefaultText ); 00138 } 00139 00140 void KOEventViewer::addText( const TQString &text ) 00141 { 00142 mText.append( text ); 00143 setText( mText ); 00144 } 00145 00146 void KOEventViewer::setDefaultText( const TQString &text ) 00147 { 00148 mDefaultText = text; 00149 } 00150 00151 void KOEventViewer::changeIncidenceDisplay( Incidence *incidence, const TQDate &date, int action ) 00152 { 00153 if ( mIncidence && ( incidence->uid() == mIncidence->uid() ) ) { 00154 switch ( action ) { 00155 case KOGlobals::INCIDENCEEDITED: 00156 setIncidence( incidence, date ); 00157 break; 00158 case KOGlobals::INCIDENCEDELETED: 00159 setIncidence( 0, date ); 00160 break; 00161 } 00162 } 00163 } 00164 00165 void KOEventViewer::contentsContextMenuEvent( TQContextMenuEvent *e ) 00166 { 00167 TQString name = UriHandler::attachmentNameFromUri( mAttachLink ); 00168 TQString uid = UriHandler::uidFromUri( mAttachLink ); 00169 if ( name.isEmpty() || uid.isEmpty() ) { 00170 TQTextBrowser::contentsContextMenuEvent( e ); 00171 return; 00172 } 00173 00174 KPopupMenu *menu = new KPopupMenu(); 00175 menu->insertItem( i18n( "Open Attachment" ), 0 ); 00176 menu->insertItem( i18n( "Save Attachment As..." ), 1 ); 00177 00178 switch( menu->exec( TQCursor::pos(), 0 ) ) { 00179 case 0: // open 00180 AttachmentHandler::view( parentWidget(), name, uid ); 00181 break; 00182 case 1: // save as 00183 AttachmentHandler::saveAs( parentWidget(), name, uid ); 00184 break; 00185 default: 00186 break; 00187 } 00188 } 00189 00190 #include "koeventviewer.moc"