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 Wed Jul 28 23:58:03 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003