• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

kmail

  • sources
  • kde-4.12
  • kdepim
  • kmail
kmmainwin.cpp
Go to the documentation of this file.
1 /*
2  * kmail: KDE mail client
3  * Copyright (c) 1996-1998 Stefan Taferner <taferner@kde.org>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  *
19  */
20 
21 #include "kmmainwin.h"
22 #include "kmmainwidget.h"
23 #include "kstatusbar.h"
24 #include "progresswidget/progressdialog.h"
25 #include "progresswidget/statusbarprogresswidget.h"
26 #include "misc/broadcaststatus.h"
27 #include "util.h"
28 #include "tag/tagactionmanager.h"
29 
30 #include <QTimer>
31 
32 #include <KMenuBar>
33 #include <KToggleAction>
34 #include <kapplication.h>
35 #include <klocale.h>
36 #include <kedittoolbar.h>
37 #include <kconfig.h>
38 #include <kmessagebox.h>
39 #include <kxmlguifactory.h>
40 #include <kstringhandler.h>
41 #include <kstandardaction.h>
42 #include <kdebug.h>
43 #include <ktip.h>
44 #include <kicon.h>
45 #include <kaction.h>
46 
47 #include <QLabel>
48 #include "messagecomposer/sender/messagesender.h"
49 
50 
51 #include "kmmainwin.moc"
52 
53 
54 KMMainWin::KMMainWin(QWidget *)
55  : KXmlGuiWindow( 0 ),
56  mReallyClose( false )
57 {
58  setObjectName( QLatin1String("kmail-mainwindow#") );
59  // Set this to be the group leader for all subdialogs - this means
60  // modal subdialogs will only affect this dialog, not the other windows
61  setAttribute( Qt::WA_GroupLeader );
62 
63  KAction *action = new KAction( KIcon(QLatin1String("window-new")), i18n("New &Window"), this );
64  actionCollection()->addAction( QLatin1String("new_mail_client"), action );
65  connect( action, SIGNAL(triggered(bool)), SLOT(slotNewMailReader()) );
66 
67  resize( 700, 500 ); // The default size
68 
69  mKMMainWidget = new KMMainWidget( this, this, actionCollection() );
70  connect(mKMMainWidget,SIGNAL(recreateGui()),this,SLOT(slotUpdateGui()));
71  setCentralWidget( mKMMainWidget );
72  setupStatusBar();
73  if ( kmkernel->xmlGuiInstance().isValid() )
74  setComponentData( kmkernel->xmlGuiInstance() );
75 
76  setStandardToolBarMenuEnabled( true );
77 
78  KStandardAction::configureToolbars( this, SLOT(slotEditToolbars()),
79  actionCollection() );
80 
81  KStandardAction::keyBindings( guiFactory(), SLOT(configureShortcuts()),
82  actionCollection() );
83 
84  mHideMenuBarAction = KStandardAction::showMenubar( this, SLOT(slotToggleMenubar()), actionCollection() );
85  mHideMenuBarAction->setChecked( GlobalSettings::self()->showMenuBar() );
86  slotToggleMenubar( true );
87 
88 
89  KStandardAction::quit( this, SLOT(slotQuit()), actionCollection() );
90  createGUI( QLatin1String("kmmainwin.rc") );
91 
92  //must be after createGUI, otherwise e.g toolbar settings are not loaded
93  applyMainWindowSettings( KMKernel::self()->config()->group( "Main Window") );
94 
95  connect( KPIM::BroadcastStatus::instance(), SIGNAL(statusMsg(QString)),
96  this, SLOT(displayStatusMsg(QString)) );
97 
98  connect( mKMMainWidget, SIGNAL(captionChangeRequest(QString)),
99  SLOT(setCaption(QString)) );
100 
101  if ( kmkernel->firstInstance() )
102  QTimer::singleShot( 200, this, SLOT(slotShowTipOnStart()) );
103 }
104 
105 KMMainWin::~KMMainWin()
106 {
107  saveMainWindowSettings( KMKernel::self()->config()->group( "Main Window") );
108  KMKernel::self()->config()->sync();
109 }
110 
111 void KMMainWin::displayStatusMsg( const QString& aText )
112 {
113  if ( !statusBar() || !mLittleProgress )
114  return;
115  const int statusWidth = statusBar()->width() - mLittleProgress->width()
116  - fontMetrics().maxWidth();
117 
118  const QString text = fontMetrics().elidedText( QLatin1Char(' ') + aText, Qt::ElideRight,
119  statusWidth );
120 
121  // ### FIXME: We should disable richtext/HTML (to avoid possible denial of service attacks),
122  // but this code would double the size of the status bar if the user hovers
123  // over an <foo@bar.com>-style email address :-(
124 // text.replace("&", "&amp;");
125 // text.replace("<", "&lt;");
126 // text.replace(">", "&gt;");
127 
128  statusBar()->changeItem( text, 1 );
129 }
130 
131 void KMMainWin::slotToggleMenubar(bool dontShowWarning)
132 {
133  if ( menuBar() ) {
134  if ( mHideMenuBarAction->isChecked() ) {
135  menuBar()->show();
136  } else {
137  if ( !dontShowWarning ) {
138  const QString accel = mHideMenuBarAction->shortcut().toString();
139  KMessageBox::information( this,
140  i18n( "<qt>This will hide the menu bar completely."
141  " You can show it again by typing %1.</qt>", accel ),
142  i18n("Hide menu bar"), QLatin1String("HideMenuBarWarning") );
143  }
144  menuBar()->hide();
145  }
146  GlobalSettings::self()->setShowMenuBar( mHideMenuBarAction->isChecked() );
147  }
148 }
149 
150 
151 //-----------------------------------------------------------------------------
152 void KMMainWin::slotNewMailReader()
153 {
154  KMMainWin *d;
155 
156  d = new KMMainWin();
157  d->show();
158  d->resize( d->size() );
159 }
160 
161 
162 void KMMainWin::slotEditToolbars()
163 {
164  saveMainWindowSettings(KMKernel::self()->config()->group( "Main Window") );
165  KEditToolBar dlg(guiFactory(), this);
166  connect( &dlg, SIGNAL(newToolBarConfig()), SLOT(slotUpdateGui()) );
167 
168  dlg.exec();
169 }
170 
171 void KMMainWin::slotUpdateGui()
172 {
173  // remove dynamically created actions before editing
174  mKMMainWidget->clearFilterActions();
175  mKMMainWidget->tagActionManager()->clearActions();
176 
177  createGUI(QLatin1String("kmmainwin.rc"));
178  applyMainWindowSettings(KMKernel::self()->config()->group( "Main Window") );
179 
180  // plug dynamically created actions again
181  mKMMainWidget->initializeFilterActions();
182  mKMMainWidget->tagActionManager()->createActions();
183 }
184 
185 void KMMainWin::setupStatusBar()
186 {
187  /* Create a progress dialog and hide it. */
188  mProgressDialog = new KPIM::ProgressDialog( statusBar(), this );
189  mProgressDialog->hide();
190 
191  mLittleProgress = new StatusbarProgressWidget( mProgressDialog, statusBar() );
192  mLittleProgress->show();
193 
194  statusBar()->insertItem( i18n("Starting..."), 1, 4 );
195  QTimer::singleShot( 2000, KPIM::BroadcastStatus::instance(), SLOT(reset()) );
196  statusBar()->setItemAlignment( 1, Qt::AlignLeft | Qt::AlignVCenter );
197  statusBar()->addPermanentWidget( mKMMainWidget->vacationScriptIndicator() );
198  statusBar()->addPermanentWidget( mLittleProgress );
199  mLittleProgress->show();
200 }
201 
202 void KMMainWin::slotQuit()
203 {
204  mReallyClose = true;
205  close();
206 }
207 
208 //-----------------------------------------------------------------------------
209 bool KMMainWin::restoreDockedState( int n )
210 {
211  // Default restore behavior is to show the window once it is restored.
212  // Override this if the main window was hidden in the system tray
213  // when the session was saved.
214  KConfigGroup config( kapp->sessionConfig(), QString::number( n ) );
215  bool show = !config.readEntry ("docked", false );
216 
217  return KMainWindow::restore ( n, show );
218 }
219 
220 void KMMainWin::saveProperties( KConfigGroup &config )
221 {
222  // This is called by the session manager on log-off
223  // Save the shown/hidden status so we can restore to the same state.
224  KMainWindow::saveProperties( config );
225  config.writeEntry( "docked", isHidden() );
226 }
227 
228 bool KMMainWin::queryClose()
229 {
230  if ( kmkernel->shuttingDown() || kapp->sessionSaving() || mReallyClose )
231  return true;
232  return kmkernel->canQueryClose();
233 }
234 
235 void KMMainWin::slotShowTipOnStart()
236 {
237  KTipDialog::showTip( this );
238 }
KMMainWidget::vacationScriptIndicator
QLabel * vacationScriptIndicator() const
Definition: kmmainwidget.cpp:4457
KMMainWin::slotEditToolbars
void slotEditToolbars()
Definition: kmmainwin.cpp:162
KMMainWin::slotQuit
void slotQuit()
Definition: kmmainwin.cpp:202
kmmainwidget.h
KMMainWin
Definition: kmmainwin.h:34
KPIM::BroadcastStatus::instance
static BroadcastStatus * instance()
KMMainWin::KMMainWin
KMMainWin(QWidget *parent=0)
Definition: kmmainwin.cpp:54
text
virtual QByteArray text(quint32 serialNumber) const =0
KMMainWin::slotShowTipOnStart
void slotShowTipOnStart()
Definition: kmmainwin.cpp:235
tagactionmanager.h
KMMainWin::saveProperties
void saveProperties(KConfigGroup &)
Reimplemented to save the docked state.
Definition: kmmainwin.cpp:220
QWidget
KMMainWidget::tagActionManager
KMail::TagActionManager * tagActionManager() const
Definition: kmmainwidget.h:147
KMMainWin::slotUpdateGui
void slotUpdateGui()
Definition: kmmainwin.cpp:171
kmmainwin.h
statusbarprogresswidget.h
KMMainWin::queryClose
bool queryClose()
Definition: kmmainwin.cpp:228
KMKernel::self
static KMKernel * self()
normal control stuff
Definition: kmkernel.cpp:1451
KMKernel::config
KSharedConfig::Ptr config()
Definition: kmkernel.cpp:1456
KXmlGuiWindow
KMail::TagActionManager::clearActions
void clearActions()
Removes all actions from the GUI again.
Definition: tagactionmanager.cpp:90
KMMainWin::setupStatusBar
void setupStatusBar()
Definition: kmmainwin.cpp:185
KMMainWidget
Definition: kmmainwidget.h:83
util.h
kmkernel
#define kmkernel
Definition: kmkernel.h:22
KMMainWidget::initializeFilterActions
void initializeFilterActions()
Definition: kmmainwidget.cpp:4286
KMMainWin::~KMMainWin
virtual ~KMMainWin()
Definition: kmmainwin.cpp:105
KPIM::StatusbarProgressWidget
KPIM::ProgressDialog
KMMainWin::displayStatusMsg
void displayStatusMsg(const QString &)
Definition: kmmainwin.cpp:111
GlobalSettings::self
static GlobalSettings * self()
Definition: globalsettings.cpp:30
KMMainWidget::clearFilterActions
void clearFilterActions()
Clear and create actions for marked filters.
Definition: kmmainwidget.cpp:4264
progressdialog.h
KMMainWin::restoreDockedState
bool restoreDockedState(int number)
Same as KMMainWin::restore(), except that it also restores the docked state, which we have saved in s...
Definition: kmmainwin.cpp:209
KMail::TagActionManager::createActions
void createActions()
Creates and plugs all tag actions.
Definition: tagactionmanager.cpp:160
broadcaststatus.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:52 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kmail

Skip menu "kmail"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal