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
00098
00099
00100
00101
00102
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
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
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 }