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

kmail

  • sources
  • kde-4.14
  • 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 "libkdepim/progresswidget/progressstatusbarwidget.h"
25 #include "libkdepim/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 
49 
50 
51 
52 KMMainWin::KMMainWin(QWidget *)
53  : KXmlGuiWindow( 0 ),
54  mReallyClose( false )
55 {
56  setObjectName( QLatin1String("kmail-mainwindow#") );
57  // Set this to be the group leader for all subdialogs - this means
58  // modal subdialogs will only affect this dialog, not the other windows
59  setAttribute( Qt::WA_GroupLeader );
60 
61  resize( 700, 500 ); // The default size
62 
63  mKMMainWidget = new KMMainWidget( this, this, actionCollection() );
64  connect(mKMMainWidget,SIGNAL(recreateGui()),this,SLOT(slotUpdateGui()));
65  setCentralWidget( mKMMainWidget );
66  setupStatusBar();
67  if ( kmkernel->xmlGuiInstance().isValid() )
68  setComponentData( kmkernel->xmlGuiInstance() );
69 
70  setStandardToolBarMenuEnabled( true );
71 
72  KStandardAction::configureToolbars( this, SLOT(slotEditToolbars()),
73  actionCollection() );
74 
75  KStandardAction::keyBindings( this, SLOT(slotConfigureShortcuts()),
76  actionCollection() );
77 
78  mHideMenuBarAction = KStandardAction::showMenubar( this, SLOT(slotToggleMenubar()), actionCollection() );
79  mHideMenuBarAction->setChecked( GlobalSettings::self()->showMenuBar() );
80  slotToggleMenubar( true );
81 
82 
83  KStandardAction::quit( this, SLOT(slotQuit()), actionCollection() );
84  createGUI( QLatin1String("kmmainwin.rc") );
85 
86  //must be after createGUI, otherwise e.g toolbar settings are not loaded
87  applyMainWindowSettings( KMKernel::self()->config()->group( "Main Window") );
88 
89  connect( KPIM::BroadcastStatus::instance(), SIGNAL(statusMsg(QString)),
90  this, SLOT(displayStatusMsg(QString)) );
91 
92  connect( mKMMainWidget, SIGNAL(captionChangeRequest(QString)),
93  SLOT(setCaption(QString)) );
94 
95  if ( kmkernel->firstInstance() )
96  QTimer::singleShot( 200, this, SLOT(slotShowTipOnStart()) );
97 
98  mKMMainWidget->updateQuickSearchLineText();
99 }
100 
101 KMMainWin::~KMMainWin()
102 {
103  saveMainWindowSettings( KMKernel::self()->config()->group( "Main Window") );
104  KMKernel::self()->config()->sync();
105 }
106 
107 void KMMainWin::displayStatusMsg( const QString& aText )
108 {
109  if ( !statusBar() || !mProgressBar->littleProgress() )
110  return;
111  const int statusWidth = statusBar()->width() - mProgressBar->littleProgress()->width()
112  - fontMetrics().maxWidth();
113 
114  const QString text = fontMetrics().elidedText( QLatin1Char(' ') + aText, Qt::ElideRight,
115  statusWidth );
116 
117  // ### FIXME: We should disable richtext/HTML (to avoid possible denial of service attacks),
118  // but this code would double the size of the status bar if the user hovers
119  // over an <foo@bar.com>-style email address :-(
120  // text.replace("&", "&amp;");
121  // text.replace("<", "&lt;");
122  // text.replace(">", "&gt;");
123 
124  statusBar()->changeItem( text, 1 );
125 }
126 
127 void KMMainWin::slotToggleMenubar(bool dontShowWarning)
128 {
129  if ( menuBar() ) {
130  if ( mHideMenuBarAction->isChecked() ) {
131  menuBar()->show();
132  } else {
133  if ( !dontShowWarning ) {
134  const QString accel = mHideMenuBarAction->shortcut().toString();
135  KMessageBox::information( this,
136  i18n( "<qt>This will hide the menu bar completely."
137  " You can show it again by typing %1.</qt>", accel ),
138  i18n("Hide menu bar"), QLatin1String("HideMenuBarWarning") );
139  }
140  menuBar()->hide();
141  }
142  GlobalSettings::self()->setShowMenuBar( mHideMenuBarAction->isChecked() );
143  }
144 }
145 
146 void KMMainWin::slotEditToolbars()
147 {
148  saveMainWindowSettings(KMKernel::self()->config()->group( "Main Window") );
149  KEditToolBar dlg(guiFactory(), this);
150  connect( &dlg, SIGNAL(newToolBarConfig()), SLOT(slotUpdateGui()) );
151 
152  dlg.exec();
153 }
154 
155 void KMMainWin::slotUpdateGui()
156 {
157  // remove dynamically created actions before editing
158  mKMMainWidget->clearFilterActions();
159  mKMMainWidget->tagActionManager()->clearActions();
160 
161  createGUI(QLatin1String("kmmainwin.rc"));
162  applyMainWindowSettings(KMKernel::self()->config()->group( "Main Window") );
163 
164  // plug dynamically created actions again
165  mKMMainWidget->initializeFilterActions();
166  mKMMainWidget->tagActionManager()->createActions();
167 }
168 
169 void KMMainWin::setupStatusBar()
170 {
171  /* Create a progress dialog and hide it. */
172  mProgressBar = new KPIM::ProgressStatusBarWidget( statusBar(), this);
173 
174  statusBar()->insertItem( i18n("Starting..."), 1, 4 );
175  QTimer::singleShot( 2000, KPIM::BroadcastStatus::instance(), SLOT(reset()) );
176  statusBar()->setItemAlignment( 1, Qt::AlignLeft | Qt::AlignVCenter );
177  statusBar()->addPermanentWidget( mKMMainWidget->vacationScriptIndicator() );
178  statusBar()->addPermanentWidget( mProgressBar->littleProgress() );
179 }
180 
181 void KMMainWin::slotQuit()
182 {
183  mReallyClose = true;
184  close();
185 }
186 
187 //-----------------------------------------------------------------------------
188 bool KMMainWin::restoreDockedState( int n )
189 {
190  // Default restore behavior is to show the window once it is restored.
191  // Override this if the main window was hidden in the system tray
192  // when the session was saved.
193  KConfigGroup config( kapp->sessionConfig(), QString::number( n ) );
194  bool show = !config.readEntry ("docked", false );
195 
196  return KMainWindow::restore ( n, show );
197 }
198 
199 void KMMainWin::saveProperties( KConfigGroup &config )
200 {
201  // This is called by the session manager on log-off
202  // Save the shown/hidden status so we can restore to the same state.
203  KMainWindow::saveProperties( config );
204  config.writeEntry( "docked", isHidden() );
205 }
206 
207 bool KMMainWin::queryClose()
208 {
209  if ( kmkernel->shuttingDown() || kapp->sessionSaving() || mReallyClose )
210  return true;
211  return kmkernel->canQueryClose();
212 }
213 
214 void KMMainWin::slotShowTipOnStart()
215 {
216  KTipDialog::showTip( this );
217 }
218 
219 void KMMainWin::slotConfigureShortcuts()
220 {
221  if (guiFactory()->configureShortcuts()) {
222  mKMMainWidget->updateQuickSearchLineText();
223  }
224 }
QWidget
KMMainWin::slotEditToolbars
void slotEditToolbars()
Definition: kmmainwin.cpp:146
KMMainWin::slotQuit
void slotQuit()
Definition: kmmainwin.cpp:181
kmmainwidget.h
KPIM::BroadcastStatus::instance
static BroadcastStatus * instance()
KMMainWin::KMMainWin
KMMainWin(QWidget *parent=0)
Definition: kmmainwin.cpp:52
text
virtual QByteArray text(quint32 serialNumber) const =0
KMMainWin::slotShowTipOnStart
void slotShowTipOnStart()
Definition: kmmainwin.cpp:214
tagactionmanager.h
KMMainWin::saveProperties
void saveProperties(KConfigGroup &)
Reimplemented to save the docked state.
Definition: kmmainwin.cpp:199
KMMainWin::slotUpdateGui
void slotUpdateGui()
Definition: kmmainwin.cpp:155
kmmainwin.h
statusbarprogresswidget.h
KMMainWin::queryClose
bool queryClose()
Definition: kmmainwin.cpp:207
KMKernel::self
static KMKernel * self()
normal control stuff
Definition: kmkernel.cpp:1471
KMKernel::config
KSharedConfig::Ptr config()
Definition: kmkernel.cpp:1476
QWidget::width
width
KMMainWidget::vacationScriptIndicator
QWidget * vacationScriptIndicator() const
Definition: kmmainwidget.cpp:4235
QString::number
QString number(int n, int base)
KXmlGuiWindow
KMail::TagActionManager::clearActions
void clearActions()
Removes all actions from the GUI again.
Definition: tagactionmanager.cpp:75
KMMainWin::setupStatusBar
void setupStatusBar()
Definition: kmmainwin.cpp:169
KMMainWidget
Definition: kmmainwidget.h:91
QString
util.h
kmkernel
#define kmkernel
Definition: kmkernel.h:24
KMMainWidget::initializeFilterActions
void initializeFilterActions()
Definition: kmmainwidget.cpp:4087
QLatin1Char
KMMainWin::~KMMainWin
virtual ~KMMainWin()
Definition: kmmainwin.cpp:101
KMMainWin::displayStatusMsg
void displayStatusMsg(const QString &)
Definition: kmmainwin.cpp:107
progressstatusbarwidget.h
GlobalSettings::self
static GlobalSettings * self()
Definition: globalsettings.cpp:30
KPIM::ProgressStatusBarWidget::littleProgress
KPIM::StatusbarProgressWidget * littleProgress() const
QLatin1String
KMMainWidget::clearFilterActions
void clearFilterActions()
Clear and create actions for marked filters.
Definition: kmmainwidget.cpp:4065
KMMainWidget::tagActionManager
KMail::TagActionManager * tagActionManager() const
Definition: kmmainwidget.cpp:4245
KPIM::ProgressStatusBarWidget
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:188
KMail::TagActionManager::createActions
void createActions()
Creates and plugs all tag actions.
Definition: tagactionmanager.cpp:145
broadcaststatus.h
KMMainWidget::updateQuickSearchLineText
void updateQuickSearchLineText()
Definition: kmmainwidget.cpp:4423
QTimer::singleShot
singleShot
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:34:33 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
  • pimprint

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