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 }