kmail Library API Documentation

kmmainwin.cpp

00001 #ifdef HAVE_CONFIG_H
00002 #include <config.h>
00003 #endif
00004 
00005 #include "kmmainwin.h"
00006 #include "kmmainwidget.h"
00007 #include "kstatusbar.h"
00008 #include "kmkernel.h"
00009 #include "kmsender.h"
00010 #include "kmbroadcaststatus.h"
00011 #include "kmglobal.h"
00012 #include "kapplication.h"
00013 #include <klocale.h>
00014 #include <kedittoolbar.h>
00015 #include <kconfig.h>
00016 #include <kmessagebox.h>
00017 
00018 #include "kmmainwin.moc"
00019 
00020 KMMainWin::KMMainWin(QWidget *)
00021     : KMTopLevelWidget("kmail-mainwindow")
00022 {
00023   mKMMainWidget = new KMMainWidget( this, "KMMainWidget", actionCollection() );
00024   mKMMainWidget->resize( 450, 600 );
00025   setCentralWidget(mKMMainWidget);
00026   setupStatusBar();
00027   if (kmkernel->xmlGuiInstance())
00028     setInstance( kmkernel->xmlGuiInstance() );
00029 
00030 #if KDE_IS_VERSION( 3, 1, 90 )
00031   createStandardStatusBarAction();
00032   setStandardToolBarMenuEnabled(true);
00033 #endif
00034 
00035   KStdAction::configureToolbars(this, SLOT(slotEditToolbars()),
00036                 actionCollection());
00037 
00038   KStdAction::keyBindings(mKMMainWidget, SLOT(slotEditKeys()),
00039                           actionCollection());
00040 
00041 #if !KDE_IS_VERSION( 3, 1, 90 )
00042   mToolbarAction = KStdAction::showToolbar(this,
00043                        SLOT(slotToggleToolBar()),
00044                        actionCollection());
00045   mStatusbarAction = KStdAction::showStatusbar(this,
00046                            SLOT(slotToggleStatusBar()),
00047                            actionCollection());
00048 #endif
00049 
00050   KStdAction::quit( this, SLOT(slotQuit()), actionCollection());
00051   createGUI( "kmmainwin.rc", false );
00052 #if !KDE_IS_VERSION( 3, 1, 90 )
00053   mToolbarAction->setChecked(!toolBar()->isHidden());
00054   mStatusbarAction->setChecked(!statusBar()->isHidden());
00055 #endif
00056 
00057   conserveMemory();
00058   applyMainWindowSettings(KMKernel::config(), "Main Window");
00059   connect(kmkernel->msgSender(), SIGNAL(statusMsg(const QString&)),
00060       this, SLOT(statusMsg(const QString&)));
00061   connect(kmkernel, SIGNAL(configChanged()),
00062     this, SLOT(slotConfigChanged()));
00063   connect(mKMMainWidget->messageView(), SIGNAL(statusMsg(const QString&)),
00064       this, SLOT(htmlStatusMsg(const QString&)));
00065   connect(mKMMainWidget, SIGNAL(captionChangeRequest(const QString&)),
00066       SLOT(setCaption(const QString&)) );
00067 }
00068 
00069 KMMainWin::~KMMainWin()
00070 {
00071   saveMainWindowSettings(KMKernel::config(), "Main Window");
00072   KMKernel::config()->sync();
00073 }
00074 
00075 void KMMainWin::statusMsg(const QString& aText)
00076 {
00077   mLastStatusMsg = aText;
00078   displayStatusMsg(aText);
00079 }
00080 
00081 void KMMainWin::htmlStatusMsg(const QString& aText)
00082 {
00083   if (aText.isEmpty()) displayStatusMsg(mLastStatusMsg);
00084   else displayStatusMsg(aText);
00085 }
00086 
00087 void KMMainWin::displayStatusMsg(const QString& aText)
00088 {
00089   if ( !statusBar() || !littleProgress) return;
00090   QString text = " " + aText + " ";
00091   int statusWidth = statusBar()->width() - littleProgress->width()
00092     - fontMetrics().maxWidth();
00093 
00094   while (!text.isEmpty() && fontMetrics().width( text ) >= statusWidth)
00095     text.truncate( text.length() - 1);
00096 
00097   // ### FIXME: We should disable richtext/HTML (to avoid possible denial of service attacks),
00098   // but this code would double the size of the satus bar if the user hovers
00099   // over an <foo@bar.com>-style email address :-(
00100 //  text.replace("&", "&amp;");
00101 //  text.replace("<", "&lt;");
00102 //  text.replace(">", "&gt;");
00103 
00104   statusBar()->changeItem(text, mMessageStatusId);
00105 }
00106 
00107 void KMMainWin::slotToggleToolBar()
00108 {
00109 #if !KDE_IS_VERSION( 3, 1, 90 )
00110   if(toolBar("mainToolBar")->isVisible())
00111     toolBar("mainToolBar")->hide();
00112   else
00113     toolBar("mainToolBar")->show();
00114 #endif
00115 }
00116 
00117 void KMMainWin::slotToggleStatusBar()
00118 {
00119 #if !KDE_IS_VERSION( 3, 1, 90 )
00120   if (statusBar()->isVisible())
00121     statusBar()->hide();
00122   else
00123     statusBar()->show();
00124 #endif
00125 }
00126 
00127 void KMMainWin::slotEditToolbars()
00128 {
00129   saveMainWindowSettings(KMKernel::config(), "Main Window");
00130   KEditToolbar dlg(actionCollection(), "kmmainwin.rc");
00131 
00132   connect( &dlg, SIGNAL(newToolbarConfig()),
00133        SLOT(slotUpdateToolbars()) );
00134 
00135   dlg.exec();
00136 }
00137 
00138 void KMMainWin::slotUpdateToolbars()
00139 {
00140   createGUI("kmmainwin.rc");
00141   applyMainWindowSettings(KMKernel::config(), "Main Window");
00142 #if !KDE_IS_VERSION( 3, 1, 90 )
00143   mToolbarAction->setChecked(!toolBar()->isHidden());
00144 #endif
00145 }
00146 
00147 void KMMainWin::setupStatusBar()
00148 {
00149   mMessageStatusId = 1;
00150   littleProgress = mainKMWidget()->progressDialog();
00151 
00152   statusBar()->addWidget( littleProgress, 0 , true );
00153   statusBar()->insertItem(i18n(" Initializing..."), 1, 1 );
00154   statusBar()->setItemAlignment( 1, AlignLeft | AlignVCenter );
00155   littleProgress->show();
00156 }
00157 
00159 void KMMainWin::readConfig(void)
00160 {
00161 }
00162 
00164 void KMMainWin::writeConfig(void)
00165 {
00166   mKMMainWidget->writeConfig();
00167 }
00168 
00169 void KMMainWin::slotQuit()
00170 {
00171     close();
00172 }
00173 
00174 void KMMainWin::slotConfigChanged()
00175 {
00176   readConfig();
00177 }
00178 
00179 //-----------------------------------------------------------------------------
00180 bool KMMainWin::queryClose() {
00181   if (kmkernel->shuttingDown() || kapp->sessionSaving())
00182     return true;
00183 
00184   int      ret = 0;
00185   QString  str = i18n("Expire old messages from all folders? "
00186               "Expired messages are permanently deleted.");
00187   KConfig *config = KMKernel::config();
00188 
00189   // Make sure this is the last window.
00190   KMainWindow   *kmWin = 0;
00191   int           num = 0;
00192 
00193   kmkernel->setCanExpire(false);
00194   for (kmWin = KMainWindow::memberList->first(); kmWin;
00195        kmWin = KMainWindow::memberList->next()) {
00196     if (kmWin->isA("KMMainWin")) {
00197       num++;
00198     }
00199   }
00200   // If this isn't the last open window, don't do anything.
00201   if (num > 1) {
00202     return true;
00203   }
00204 
00205   KConfigGroupSaver saver(config, "General");
00206   if (config->readNumEntry("when-to-expire", 0) != expireAtExit) {
00207     return true;
00208   }
00209 
00210   if (config->readBoolEntry("warn-before-expire", true)) {
00211     ret = KMessageBox::warningYesNo(KMainWindow::memberList->first(),
00212              str, i18n("Expire Old Messages?"), i18n("Expire"), i18n("Don't Expire"));
00213     if (ret == KMessageBox::Yes) {
00214       kmkernel->setCanExpire(true);
00215     }
00216   }
00217 
00218   return true;
00219 }
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:37:32 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003