kmail

kmreadermainwin.cpp
1 /*
2  This file is part of KMail, the KDE mail client.
3  Copyright (c) 2002 Don Sanders <sanders@kde.org>
4 
5  KMail is free software; you can redistribute it and/or modify it
6  under the terms of the GNU General Public License, version 2, as
7  published by the Free Software Foundation.
8 
9  KMail is distributed in the hope that it will be useful, but
10  WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 //
19 // A toplevel TDEMainWindow derived class for displaying
20 // single messages or single message parts.
21 //
22 // Could be extended to include support for normal main window
23 // widgets like a toolbar.
24 
25 #ifdef HAVE_CONFIG_H
26 #include <config.h>
27 #endif
28 
29 #include <tqaccel.h>
30 #include <tdeapplication.h>
31 #include <kedittoolbar.h>
32 #include <tdelocale.h>
33 #include <tdestdaccel.h>
34 #include <twin.h>
35 #include <tdeaction.h>
36 #include <kiconloader.h>
37 #include <kdebug.h>
38 #include "kmcommands.h"
39 #include "tdemenubar.h"
40 #include "tdepopupmenu.h"
41 #include "kmreaderwin.h"
42 #include "kmfolder.h"
43 #include "kmmainwidget.h"
44 #include "kmfoldertree.h"
45 #include "kmmsgdict.h"
46 #include "csshelper.h"
47 #include "messageactions.h"
48 
49 #include "globalsettings.h"
50 
51 #include "kmreadermainwin.h"
52 
53 KMReaderMainWin::KMReaderMainWin( bool htmlOverride, bool htmlLoadExtDefault,
54  char *name )
55  : KMail::SecondaryWindow( name ? name : "readerwindow#" ),
56  mMsg( 0 )
57 {
58  mReaderWin = new KMReaderWin( this, this, actionCollection() );
59  //mReaderWin->setShowCompleteMessage( true );
60  mReaderWin->setAutoDelete( true );
61  mReaderWin->setHtmlOverride( htmlOverride );
62  mReaderWin->setHtmlLoadExtDefault( htmlLoadExtDefault );
63  mReaderWin->setDecryptMessageOverwrite( true );
64  mReaderWin->setShowSignatureDetails( false );
65  initKMReaderMainWin();
66 }
67 
68 
69 //-----------------------------------------------------------------------------
70 KMReaderMainWin::KMReaderMainWin( char *name )
71  : KMail::SecondaryWindow( name ? name : "readerwindow#" ),
72  mMsg( 0 )
73 {
74  mReaderWin = new KMReaderWin( this, this, actionCollection() );
75  mReaderWin->setAutoDelete( true );
76  initKMReaderMainWin();
77 }
78 
79 
80 //-----------------------------------------------------------------------------
81 KMReaderMainWin::KMReaderMainWin(KMMessagePart* aMsgPart,
82  bool aHTML, const TQString& aFileName, const TQString& pname,
83  const TQString & encoding, char *name )
84  : KMail::SecondaryWindow( name ? name : "readerwindow#" ),
85  mMsg( 0 )
86 {
87  mReaderWin = new KMReaderWin( this, this, actionCollection() );
88  mReaderWin->setOverrideEncoding( encoding );
89  mReaderWin->setMsgPart( aMsgPart, aHTML, aFileName, pname );
90  initKMReaderMainWin();
91 }
92 
93 
94 //-----------------------------------------------------------------------------
95 void KMReaderMainWin::initKMReaderMainWin() {
96  setCentralWidget( mReaderWin );
97  setupAccel();
98  setupGUI( Keys | StatusBar | Create, "kmreadermainwin.rc" );
99  setupForwardingActionsList();
100  applyMainWindowSettings( KMKernel::config(), "Separate Reader Window" );
101  if ( ! mReaderWin->message() ) {
102  menuBar()->hide();
103  toolBar( "mainToolBar" )->hide();
104  }
105 
106  connect( kmkernel, TQ_SIGNAL( configChanged() ),
107  this, TQ_SLOT( slotConfigChanged() ) );
108 }
109 
110 void KMReaderMainWin::setupForwardingActionsList()
111 {
112  TQPtrList<TDEAction> mForwardActionList;
113  if ( GlobalSettings::self()->forwardingInlineByDefault() ) {
114  unplugActionList( "forward_action_list" );
115  mForwardActionList.append( mForwardInlineAction );
116  mForwardActionList.append( mForwardAttachedAction );
117  mForwardActionList.append( mForwardDigestAction );
118  mForwardActionList.append( mRedirectAction );
119  plugActionList( "forward_action_list", mForwardActionList );
120  } else {
121  unplugActionList( "forward_action_list" );
122  mForwardActionList.append( mForwardAttachedAction );
123  mForwardActionList.append( mForwardInlineAction );
124  mForwardActionList.append( mForwardDigestAction );
125  mForwardActionList.append( mRedirectAction );
126  plugActionList( "forward_action_list", mForwardActionList );
127  }
128 }
129 
130 //-----------------------------------------------------------------------------
131 KMReaderMainWin::~KMReaderMainWin()
132 {
133  saveMainWindowSettings( KMKernel::config(), "Separate Reader Window" );
134 }
135 
136 //-----------------------------------------------------------------------------
137 void KMReaderMainWin::setUseFixedFont( bool useFixedFont )
138 {
139  mReaderWin->setUseFixedFont( useFixedFont );
140 }
141 
142 //-----------------------------------------------------------------------------
143 void KMReaderMainWin::showMsg( const TQString & encoding, KMMessage *msg,
144  unsigned long serNumOfOriginalMessage, int nodeIdOffset )
145 {
146  mReaderWin->setOverrideEncoding( encoding );
147  mReaderWin->setMsg( msg, true );
148  if ( serNumOfOriginalMessage != 0 ) {
149  Q_ASSERT( nodeIdOffset != -1 );
150  mReaderWin->setOriginalMsg( serNumOfOriginalMessage, nodeIdOffset );
151  }
152  mReaderWin->slotTouchMessage();
153  setCaption( msg->subject() );
154  mMsg = msg;
155  mMsgActions->setCurrentMessage( msg );
156  menuBar()->show();
157  toolBar( "mainToolBar" )->show();
158 
159  connect ( msg->parent(), TQ_SIGNAL( destroyed( TQObject* ) ), this, TQ_SLOT( slotFolderRemoved( TQObject* ) ) );
160 
161 }
162 
163 void KMReaderMainWin::slotFolderRemoved( TQObject* folderPtr )
164 {
165  assert(mMsg);
166  assert(folderPtr == mMsg->parent());
167  if( mMsg && folderPtr == mMsg->parent() )
168  mMsg->setParent( 0 );
169 }
170 
171 void KMReaderMainWin::slotReplyOrForwardFinished()
172 {
173  if ( GlobalSettings::self()->closeAfterReplyOrForward() ) {
174  close();
175  }
176 }
177 
178 //-----------------------------------------------------------------------------
179 void KMReaderMainWin::slotTrashMsg()
180 {
181  if ( !mMsg )
182  return;
183  // find the real msg by its sernum
184  KMFolder* parent;
185  int index;
186  KMMsgDict::instance()->getLocation( mMsg->getMsgSerNum(), &parent, &index );
187  if ( parent && !parent->isTrash() ) {
188  // open the folder (ref counted)
189  parent->open("trashmsg");
190  KMMessage *msg = parent->getMsg( index );
191  if (msg) {
192  KMDeleteMsgCommand *command = new KMDeleteMsgCommand( parent, msg );
193  command->start();
194  }
195  parent->close("trashmsg");
196  }
197  close();
198 }
199 
200 //-----------------------------------------------------------------------------
201 void KMReaderMainWin::slotFind()
202 {
203  mReaderWin->slotFind();
204 }
205 
206 void KMReaderMainWin::slotFindNext()
207 {
208  mReaderWin->slotFindNext();
209 }
210 
211 //-----------------------------------------------------------------------------
212 void KMReaderMainWin::slotCopy()
213 {
214  mReaderWin->slotCopySelectedText();
215 }
216 
217 //-----------------------------------------------------------------------------
218 void KMReaderMainWin::slotMarkAll()
219 {
220  mReaderWin->selectAll();
221 }
222 
223 //-----------------------------------------------------------------------------
224 void KMReaderMainWin::slotPrintMsg()
225 {
226  KMPrintCommand *command = new KMPrintCommand( this, mReaderWin->message(),
227  mReaderWin->headerStyle(), mReaderWin->headerStrategy(),
228  mReaderWin->htmlOverride(), mReaderWin->htmlLoadExtOverride(),
229  mReaderWin->isFixedFont(), mReaderWin->overrideEncoding() );
230  command->setOverrideFont( mReaderWin->cssHelper()->bodyFont( mReaderWin->isFixedFont(), true /*printing*/ ) );
231  command->start();
232 }
233 
234 //-----------------------------------------------------------------------------
235 void KMReaderMainWin::slotForwardInlineMsg()
236 {
237  KMCommand *command = 0;
238  if ( mReaderWin->message() && mReaderWin->message()->parent() ) {
239  command = new KMForwardInlineCommand( this, mReaderWin->message(),
240  mReaderWin->message()->parent()->identity() );
241  } else {
242  command = new KMForwardInlineCommand( this, mReaderWin->message() );
243  }
244  connect( command, TQ_SIGNAL( completed( KMCommand * ) ),
245  this, TQ_SLOT( slotReplyOrForwardFinished() ) );
246  command->start();
247 }
248 
249 //-----------------------------------------------------------------------------
250 void KMReaderMainWin::slotForwardAttachedMsg()
251 {
252  KMCommand *command = 0;
253  if ( mReaderWin->message() && mReaderWin->message()->parent() ) {
254  command = new KMForwardAttachedCommand( this, mReaderWin->message(),
255  mReaderWin->message()->parent()->identity() );
256  } else {
257  command = new KMForwardAttachedCommand( this, mReaderWin->message() );
258  }
259  connect( command, TQ_SIGNAL( completed( KMCommand * ) ),
260  this, TQ_SLOT( slotReplyOrForwardFinished() ) );
261  command->start();
262 }
263 
264 //-----------------------------------------------------------------------------
265 void KMReaderMainWin::slotForwardDigestMsg()
266 {
267  KMCommand *command = 0;
268  if ( mReaderWin->message() && mReaderWin->message()->parent() ) {
269  command = new KMForwardDigestCommand( this, mReaderWin->message(),
270  mReaderWin->message()->parent()->identity() );
271  } else {
272  command = new KMForwardDigestCommand( this, mReaderWin->message() );
273  }
274  connect( command, TQ_SIGNAL( completed( KMCommand * ) ),
275  this, TQ_SLOT( slotReplyOrForwardFinished() ) );
276  command->start();
277 }
278 
279 //-----------------------------------------------------------------------------
280 void KMReaderMainWin::slotRedirectMsg()
281 {
282  KMCommand *command = new KMRedirectCommand( this, mReaderWin->message() );
283  connect( command, TQ_SIGNAL( completed( KMCommand * ) ),
284  this, TQ_SLOT( slotReplyOrForwardFinished() ) );
285  command->start();
286 }
287 
288 //-----------------------------------------------------------------------------
289 void KMReaderMainWin::slotShowMsgSrc()
290 {
291  KMMessage *msg = mReaderWin->message();
292  if ( !msg )
293  return;
294  KMCommand *command = new KMShowMsgSrcCommand( this, msg,
295  mReaderWin->isFixedFont() );
296  command->start();
297 }
298 
299 //-----------------------------------------------------------------------------
300 void KMReaderMainWin::setupForwardActions()
301 {
302  disconnect( mForwardActionMenu, TQ_SIGNAL( activated() ), 0, 0 );
303  mForwardActionMenu->remove( mForwardInlineAction );
304  mForwardActionMenu->remove( mForwardAttachedAction );
305 
306  if ( GlobalSettings::self()->forwardingInlineByDefault() ) {
307  mForwardActionMenu->insert( mForwardInlineAction, 0 );
308  mForwardActionMenu->insert( mForwardAttachedAction, 1 );
309  mForwardInlineAction->setShortcut( Key_F );
310  mForwardAttachedAction->setShortcut( SHIFT+Key_F );
311  connect( mForwardActionMenu, TQ_SIGNAL(activated()), this,
312  TQ_SLOT(slotForwardInlineMsg()) );
313 
314  } else {
315  mForwardActionMenu->insert( mForwardAttachedAction, 0 );
316  mForwardActionMenu->insert( mForwardInlineAction, 1 );
317  mForwardInlineAction->setShortcut( SHIFT+Key_F );
318  mForwardAttachedAction->setShortcut( Key_F );
319  connect( mForwardActionMenu, TQ_SIGNAL(activated()), this,
320  TQ_SLOT(slotForwardAttachedMsg()) );
321  }
322 }
323 
324 //-----------------------------------------------------------------------------
325 void KMReaderMainWin::slotConfigChanged()
326 {
327  //readConfig();
328  setupForwardActions();
329  setupForwardingActionsList();
330 }
331 
332 void KMReaderMainWin::setupAccel()
333 {
334  if ( kmkernel->xmlGuiInstance() )
335  setInstance( kmkernel->xmlGuiInstance() );
336 
337  mMsgActions = new KMail::MessageActions( actionCollection(), this );
338  mMsgActions->setMessageView( mReaderWin );
339  connect( mMsgActions, TQ_SIGNAL( replyActionFinished() ),
340  this, TQ_SLOT( slotReplyOrForwardFinished() ) );
341 
342  //----- File Menu
343  //mOpenAction = KStdAction::open( this, TQ_SLOT( slotOpenMsg() ),
344  // actionCollection() );
345 
346  //mSaveAsAction = new TDEAction( i18n("Save &As..."), "document-save",
347  // TDEStdAccel::shortcut( TDEStdAccel::Save ),
348  // this, TQ_SLOT( slotSaveMsg() ),
349  // actionCollection(), "file_save_as" );
350 
351  mSaveAsAction = KStdAction::saveAs( mReaderWin, TQ_SLOT( slotSaveMsg() ),
352  actionCollection() );
353  mSaveAsAction->setShortcut( TDEStdAccel::shortcut( TDEStdAccel::Save ) );
354  mPrintAction = KStdAction::print( this, TQ_SLOT( slotPrintMsg() ),
355  actionCollection() );
356 
357  TDEAction *closeAction = KStdAction::close( this, TQ_SLOT( close() ), actionCollection() );
358  TDEShortcut closeShortcut = closeAction->shortcut();
359  closeShortcut.append( KKey(Key_Escape));
360  closeAction->setShortcut(closeShortcut);
361 
362  //----- Edit Menu
363  KStdAction::copy( this, TQ_SLOT( slotCopy() ), actionCollection() );
364  KStdAction::selectAll( this, TQ_SLOT( slotMarkAll() ), actionCollection() );
365  KStdAction::find( this, TQ_SLOT(slotFind()), actionCollection() );
366  KStdAction::findNext( this, TQ_SLOT( slotFindNext() ), actionCollection() );
367  mTrashAction = new TDEAction( KGuiItem( i18n( "&Move to Trash" ), "edittrash",
368  i18n( "Move message to trashcan" ) ),
369  Key_Delete, this, TQ_SLOT( slotTrashMsg() ),
370  actionCollection(), "move_to_trash" );
371 
372  //----- View Menu
373  mViewSourceAction = new TDEAction( i18n("&View Source"), Key_V, this,
374  TQ_SLOT(slotShowMsgSrc()), actionCollection(),
375  "view_source" );
376 
377 
378  mForwardActionMenu = new TDEActionMenu( i18n("Message->","&Forward"),
379  "mail-forward", actionCollection(),
380  "message_forward" );
381  mForwardInlineAction = new TDEAction( i18n("&Inline..."),
382  "mail-forward", SHIFT+Key_F, this,
383  TQ_SLOT(slotForwardInlineMsg()),
384  actionCollection(),
385  "message_forward_inline" );
386 
387  mForwardAttachedAction = new TDEAction( i18n("Message->Forward->","As &Attachment..."),
388  "mail-forward", Key_F, this,
389  TQ_SLOT(slotForwardAttachedMsg()),
390  actionCollection(),
391  "message_forward_as_attachment" );
392 
393  mForwardDigestAction = new TDEAction( i18n("Message->Forward->","As Di&gest..."),
394  "mail-forward", 0, this,
395  TQ_SLOT(slotForwardDigestMsg()),
396  actionCollection(),
397  "message_forward_as_digest" );
398 
399  mRedirectAction = new TDEAction( i18n("Message->Forward->","&Redirect..."),
400  "mail-forward", Key_E, this,
401  TQ_SLOT(slotRedirectMsg()),
402  actionCollection(),
403  "message_forward_redirect" );
404 
405  setupForwardActions();
406 
407  mForwardActionMenu->insert( mForwardDigestAction );
408  mForwardActionMenu->insert( mRedirectAction );
409 
410  fontAction = new TDEFontAction( "Select Font", 0, actionCollection(),
411  "text_font" );
412  fontAction->setFont( mReaderWin->cssHelper()->bodyFont().family() );
413  connect( fontAction, TQ_SIGNAL( activated( const TQString& ) ),
414  TQ_SLOT( slotFontAction( const TQString& ) ) );
415  fontSizeAction = new TDEFontSizeAction( "Select Size", 0, actionCollection(),
416  "text_size" );
417  fontSizeAction->setFontSize( mReaderWin->cssHelper()->bodyFont().pointSize() );
418  connect( fontSizeAction, TQ_SIGNAL( fontSizeChanged( int ) ),
419  TQ_SLOT( slotSizeAction( int ) ) );
420 
421  TQAccel *accel = new TQAccel(mReaderWin, "showMsg()");
422  accel->connectItem(accel->insertItem(Key_Up),
423  mReaderWin, TQ_SLOT(slotScrollUp()));
424  accel->connectItem(accel->insertItem(Key_Down),
425  mReaderWin, TQ_SLOT(slotScrollDown()));
426  accel->connectItem(accel->insertItem(Key_Prior),
427  mReaderWin, TQ_SLOT(slotScrollPrior()));
428  accel->connectItem(accel->insertItem(Key_Next),
429  mReaderWin, TQ_SLOT(slotScrollNext()));
430  accel->connectItem(accel->insertItem(TDEStdAccel::shortcut(TDEStdAccel::Copy)),
431  mReaderWin, TQ_SLOT(slotCopySelectedText()));
432  connect( mReaderWin, TQ_SIGNAL(popupMenu(KMMessage&,const KURL&,const TQPoint&)),
433  this, TQ_SLOT(slotMsgPopup(KMMessage&,const KURL&,const TQPoint&)));
434  connect(mReaderWin, TQ_SIGNAL(urlClicked(const KURL&,int)),
435  mReaderWin, TQ_SLOT(slotUrlClicked()));
436 
437  setStandardToolBarMenuEnabled(true);
438  KStdAction::configureToolbars(this, TQ_SLOT(slotEditToolbars()), actionCollection());
439 }
440 
441 
442 void KMReaderMainWin::slotMsgPopup(KMMessage &aMsg, const KURL &aUrl, const TQPoint& aPoint)
443 {
444  TDEPopupMenu * menu = new TDEPopupMenu;
445  mUrl = aUrl;
446  mMsg = &aMsg;
447  bool urlMenuAdded=false;
448  bool copyAdded = false;
449  if (!aUrl.isEmpty())
450  {
451  if (aUrl.protocol() == "mailto") {
452  // popup on a mailto URL
453  mReaderWin->mailToComposeAction()->plug( menu );
454  if ( mMsg ) {
455  mReaderWin->mailToReplyAction()->plug( menu );
456  mReaderWin->mailToForwardAction()->plug( menu );
457  menu->insertSeparator();
458  }
459  mReaderWin->addAddrBookAction()->plug( menu );
460  mReaderWin->openAddrBookAction()->plug( menu );
461  mReaderWin->copyURLAction()->plug( menu );
462  copyAdded = true;
463  } else {
464  // popup on a not-mailto URL
465  mReaderWin->urlOpenAction()->plug( menu );
466  mReaderWin->addBookmarksAction()->plug( menu );
467  mReaderWin->urlSaveAsAction()->plug( menu );
468  mReaderWin->copyURLAction()->plug( menu );
469  }
470  urlMenuAdded=true;
471  }
472  if(mReaderWin && !mReaderWin->copyText().isEmpty()) {
473  if ( urlMenuAdded )
474  menu->insertSeparator();
475  mMsgActions->replyMenu()->plug( menu );
476  menu->insertSeparator();
477  if( !copyAdded )
478  mReaderWin->copyAction()->plug( menu );
479  mReaderWin->selectAllAction()->plug( menu );
480  } else if ( !urlMenuAdded )
481  {
482  // popup somewhere else (i.e., not a URL) on the message
483 
484  if (!mMsg) // no message
485  {
486  delete menu;
487  return;
488  }
489 
490  if ( ! ( aMsg.parent() && ( aMsg.parent()->isSent() ||
491  aMsg.parent()->isDrafts() ||
492  aMsg.parent()->isTemplates() ) ) ) {
493  // add the reply and forward actions only if we are not in a sent-mail,
494  // templates or drafts folder
495  //
496  // FIXME: needs custom templates added to menu
497  // (see KMMainWidget::updateCustomTemplateMenus)
498  mMsgActions->replyMenu()->plug( menu );
499  mForwardActionMenu->plug( menu );
500  menu->insertSeparator();
501  }
502 
503  TQPopupMenu* copyMenu = new TQPopupMenu(menu);
504  KMMainWidget* mainwin = kmkernel->getKMMainWidget();
505  if ( mainwin )
506  mainwin->folderTree()->folderToPopupMenu( KMFolderTree::CopyMessage, this,
507  &mMenuToFolder, copyMenu );
508  menu->insertItem( i18n("&Copy To" ), copyMenu );
509  menu->insertSeparator();
510  mViewSourceAction->plug( menu );
511  mReaderWin->toggleFixFontAction()->plug( menu );
512  mReaderWin->toggleMimePartTreeAction()->plug( menu );
513  menu->insertSeparator();
514  mPrintAction->plug( menu );
515  mSaveAsAction->plug( menu );
516  menu->insertItem( i18n("Save Attachments..."), mReaderWin, TQ_SLOT(slotSaveAttachments()) );
517  mMsgActions->createTodoAction()->plug( menu );
518  }
519  menu->exec(aPoint, 0);
520  delete menu;
521 }
522 
523 void KMReaderMainWin::copySelectedToFolder( int menuId )
524 {
525  if (!mMenuToFolder[menuId])
526  return;
527 
528  KMCommand *command = new KMCopyCommand( mMenuToFolder[menuId], mMsg );
529  command->start();
530 }
531 
532 void KMReaderMainWin::slotFontAction( const TQString& font)
533 {
534  TQFont f( mReaderWin->cssHelper()->bodyFont() );
535  f.setFamily( font );
536  mReaderWin->cssHelper()->setBodyFont( f );
537  mReaderWin->cssHelper()->setPrintFont( f );
538  mReaderWin->saveRelativePosition();
539  mReaderWin->update();
540 }
541 
542 void KMReaderMainWin::slotSizeAction( int size )
543 {
544  TQFont f( mReaderWin->cssHelper()->bodyFont() );
545  f.setPointSize( size );
546  mReaderWin->cssHelper()->setBodyFont( f );
547  mReaderWin->cssHelper()->setPrintFont( f );
548  mReaderWin->saveRelativePosition();
549  mReaderWin->update();
550 }
551 
552 void KMReaderMainWin::slotCreateTodo()
553 {
554  if ( !mMsg )
555  return;
556  KMCommand *command = new CreateTodoCommand( this, mMsg );
557  command->start();
558 }
559 
560 void KMReaderMainWin::slotEditToolbars()
561 {
562  saveMainWindowSettings( KMKernel::config(), "ReaderWindow" );
563  KEditToolbar dlg( guiFactory(), this );
564  connect( &dlg, TQ_SIGNAL(newToolbarConfig()), TQ_SLOT(slotUpdateToolbars()) );
565  dlg.exec();
566 }
567 
568 void KMReaderMainWin::slotUpdateToolbars()
569 {
570  createGUI("kmreadermainwin.rc");
571  applyMainWindowSettings(KMKernel::config(), "ReaderWindow");
572 }
573 
574 #include "kmreadermainwin.moc"
Mail folder.
Definition: kmfolder.h:69
bool isTrash()
Returns true if this folder is configured as a trash folder, locally or for one of the accounts.
Definition: kmfolder.h:110
void close(const char *owner, bool force=false)
Close folder.
Definition: kmfolder.cpp:489
KMMessage * getMsg(int idx)
Read message at given index.
Definition: kmfolder.cpp:321
int open(const char *owner)
Open folder for access.
Definition: kmfolder.cpp:479
This is a Mime Message.
Definition: kmmessage.h:68
TQString subject() const
Get or set the 'Subject' header field.
Definition: kmmessage.cpp:2049
void getLocation(unsigned long key, KMFolder **retFolder, int *retIndex) const
Returns the folder the message represented by the serial number key is in and the index in that folde...
Definition: kmmsgdict.cpp:319
static const KMMsgDict * instance()
Access the globally unique MessageDict.
Definition: kmmsgdict.cpp:167
This class implements a "reader window", that is a window used for reading or viewing messages.
Definition: kmreaderwin.h:75
Manages common actions that can be performed on one or more messages.
folderdiaquotatab.h
Definition: aboutdata.cpp:40