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

kpimidentities

  • sources
  • kde-4.12
  • kdepimlibs
  • kpimidentities
signatureconfigurator.cpp
1 /* -*- c++ -*-
2  Copyright 2008 Thomas McGuire <Thomas.McGuire@gmx.net>
3  Copyright 2008 Edwin Schepers <yez@familieschepers.nl>
4  Copyright 2004 Marc Mutz <mutz@kde.org>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with this library. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 
21 #include "signatureconfigurator.h"
22 #include "identity.h"
23 
24 #include <kactioncollection.h>
25 #include <klocalizedstring.h>
26 #include <kdebug.h>
27 #include <kdialog.h>
28 #include <klineedit.h>
29 #include <kurlrequester.h>
30 #include <kshellcompletion.h>
31 #include <ktoolbar.h>
32 #include <krun.h>
33 #include <KUrl>
34 #include <KComboBox>
35 #include <KStandardDirs>
36 
37 #include <kpimtextedit/textedit.h>
38 
39 #include <QCheckBox>
40 #include <QDir>
41 #include <QFileInfo>
42 #include <QLabel>
43 #include <QLayout>
44 #include <QMimeData>
45 #include <QTextEdit>
46 
47 #include <QStackedWidget>
48 
49 #include <QVBoxLayout>
50 #include <QHBoxLayout>
51 
52 #include <assert.h>
53 
54 using namespace KPIMIdentities;
55 
56 namespace KPIMIdentities {
57 
62 //@cond PRIVATE
63 class SignatureConfigurator::Private
64 {
65  public:
66  Private( SignatureConfigurator *parent );
67  void init();
68 
69  SignatureConfigurator *q;
70  bool inlinedHtml;
71  QString imageLocation;
72 };
73 //@endcond
74 
75 SignatureConfigurator::Private::Private( SignatureConfigurator *parent )
76  :q( parent ), inlinedHtml( true )
77 {
78 }
79 
80 void SignatureConfigurator::Private::init()
81 {
82  // tmp. vars:
83  QLabel * label;
84  QWidget * page;
85  QHBoxLayout * hlay;
86  QVBoxLayout * vlay;
87  QVBoxLayout * page_vlay;
88 
89  vlay = new QVBoxLayout( q );
90  vlay->setObjectName( QLatin1String("main layout") );
91  vlay->setMargin( 0 );
92 
93  // "enable signatue" checkbox:
94  q->mEnableCheck = new QCheckBox( i18n( "&Enable signature" ), q );
95  q->mEnableCheck->setWhatsThis(
96  i18n( "Check this box if you want KMail to append a signature to mails "
97  "written with this identity." ) );
98  vlay->addWidget( q->mEnableCheck );
99 
100  // "obtain signature text from" combo and label:
101  hlay = new QHBoxLayout(); // inherits spacing
102  vlay->addLayout( hlay );
103  q->mSourceCombo = new KComboBox( q );
104  q->mSourceCombo->setEditable( false );
105  q->mSourceCombo->setWhatsThis(
106  i18n( "Click on the widgets below to obtain help on the input methods." ) );
107  q->mSourceCombo->setEnabled( false ); // since !mEnableCheck->isChecked()
108  q->mSourceCombo->addItems( QStringList()
109  << i18nc( "continuation of \"obtain signature text from\"",
110  "Input Field Below" )
111  << i18nc( "continuation of \"obtain signature text from\"",
112  "File" )
113  << i18nc( "continuation of \"obtain signature text from\"",
114  "Output of Command" ) );
115  label = new QLabel( i18n( "Obtain signature &text from:" ), q );
116  label->setBuddy( q->mSourceCombo );
117  label->setEnabled( false ); // since !mEnableCheck->isChecked()
118  hlay->addWidget( label );
119  hlay->addWidget( q->mSourceCombo, 1 );
120 
121  // widget stack that is controlled by the source combo:
122  QStackedWidget * widgetStack = new QStackedWidget( q );
123  widgetStack->setEnabled( false ); // since !mEnableCheck->isChecked()
124  vlay->addWidget( widgetStack, 1 );
125  q->connect( q->mSourceCombo, SIGNAL(currentIndexChanged(int)),
126  widgetStack, SLOT(setCurrentIndex(int)) );
127  q->connect( q->mSourceCombo, SIGNAL(highlighted(int)),
128  widgetStack, SLOT(setCurrentIndex(int)) );
129  // connects for the enabling of the widgets depending on
130  // signatureEnabled:
131  q->connect( q->mEnableCheck, SIGNAL(toggled(bool)),
132  q->mSourceCombo, SLOT(setEnabled(bool)) );
133  q->connect( q->mEnableCheck, SIGNAL(toggled(bool)),
134  widgetStack, SLOT(setEnabled(bool)) );
135  q->connect( q->mEnableCheck, SIGNAL(toggled(bool)),
136  label, SLOT(setEnabled(bool)) );
137  // The focus might be still in the widget that is disabled
138  q->connect( q->mEnableCheck, SIGNAL(clicked()),
139  q->mEnableCheck, SLOT(setFocus()) );
140 
141  int pageno = 0;
142  // page 0: input field for direct entering:
143  page = new QWidget( widgetStack );
144  widgetStack->insertWidget( pageno, page );
145  page_vlay = new QVBoxLayout( page );
146 
147 #ifndef QT_NO_TOOLBAR
148  q->mEditToolBar = new KToolBar( q );
149  q->mEditToolBar->setToolButtonStyle( Qt::ToolButtonIconOnly );
150  page_vlay->addWidget( q->mEditToolBar, 0 );
151 
152  q->mFormatToolBar = new KToolBar( q );
153  q->mFormatToolBar->setToolButtonStyle( Qt::ToolButtonIconOnly );
154  page_vlay->addWidget( q->mFormatToolBar, 1 );
155 #endif
156 
157  q->mTextEdit = new KPIMTextEdit::TextEdit( q );
158  static_cast<KPIMTextEdit::TextEdit*>( q->mTextEdit )->enableImageActions();
159  static_cast<KPIMTextEdit::TextEdit*>( q->mTextEdit )->enableInsertHtmlActions();
160  static_cast<KPIMTextEdit::TextEdit*>( q->mTextEdit )->enableInsertTableActions();
161  page_vlay->addWidget( q->mTextEdit, 2 );
162  q->mTextEdit->setWhatsThis( i18n( "Use this field to enter an arbitrary static signature." ) );
163  // exclude SupportToPlainText.
164  q->mTextEdit->setRichTextSupport( KRichTextWidget::FullTextFormattingSupport |
165  KRichTextWidget::FullListSupport |
166  KRichTextWidget::SupportAlignment |
167  KRichTextWidget::SupportRuleLine |
168  KRichTextWidget::SupportHyperlinks |
169  KRichTextWidget::SupportFormatPainting );
170 
171  // Fill the toolbars.
172  KActionCollection *actionCollection = new KActionCollection( q );
173  q->mTextEdit->createActions( actionCollection );
174 #ifndef QT_NO_TOOLBAR
175  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_bold") ) );
176  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_italic") ) );
177  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_underline") ) );
178  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_strikeout") ) );
179  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_foreground_color") ) );
180  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_background_color") ) );
181  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_font_family") ) );
182  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_font_size") ) );
183  q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_reset") ) );
184 
185  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_list_style") ) );
186  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_list_indent_more") ) );
187  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_list_indent_less") ) );
188  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_list_indent_less") ) );
189  q->mFormatToolBar->addSeparator();
190 
191  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_align_left") ) );
192  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_align_center") ) );
193  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_align_right") ) );
194  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_align_justify") ) );
195  q->mFormatToolBar->addSeparator();
196 
197  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("insert_horizontal_rule") ) );
198  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("manage_link") ) );
199  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_painter") ) );
200 
201  q->mFormatToolBar->addSeparator();
202  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("add_image") ) );
203  q->mFormatToolBar->addSeparator();
204  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("insert_html") ) );
205  q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("insert_table" )) );
206 #endif
207 
208  hlay = new QHBoxLayout(); // inherits spacing
209  page_vlay->addLayout( hlay );
210  q->mHtmlCheck = new QCheckBox( i18n( "&Use HTML" ), page );
211  q->connect( q->mHtmlCheck, SIGNAL(clicked()),
212  q, SLOT(slotSetHtml()) );
213  hlay->addWidget( q->mHtmlCheck );
214  inlinedHtml = true;
215 
216  widgetStack->setCurrentIndex( 0 ); // since mSourceCombo->currentItem() == 0
217 
218  // page 1: "signature file" requester, label, "edit file" button:
219  ++pageno;
220  page = new QWidget( widgetStack );
221  widgetStack->insertWidget( pageno, page ); // force sequential numbers (play safe)
222  page_vlay = new QVBoxLayout( page );
223  page_vlay->setMargin( 0 );
224  hlay = new QHBoxLayout(); // inherits spacing
225  page_vlay->addLayout( hlay );
226  q->mFileRequester = new KUrlRequester( page );
227  q->mFileRequester->setWhatsThis(
228  i18n( "Use this requester to specify a text file that contains your "
229  "signature. It will be read every time you create a new mail or "
230  "append a new signature." ) );
231  label = new QLabel( i18n( "S&pecify file:" ), page );
232  label->setBuddy( q->mFileRequester );
233  hlay->addWidget( label );
234  hlay->addWidget( q->mFileRequester, 1 );
235  q->mFileRequester->button()->setAutoDefault( false );
236  q->connect( q->mFileRequester, SIGNAL(textChanged(QString)),
237  q, SLOT(slotEnableEditButton(QString)) );
238  q->mEditButton = new QPushButton( i18n( "Edit &File" ), page );
239  q->mEditButton->setWhatsThis( i18n( "Opens the specified file in a text editor." ) );
240  q->connect( q->mEditButton, SIGNAL(clicked()),
241  q, SLOT(slotEdit()) );
242  q->mEditButton->setAutoDefault( false );
243  q->mEditButton->setEnabled( false ); // initially nothing to edit
244  hlay->addWidget( q->mEditButton );
245  page_vlay->addStretch( 1 ); // spacer
246 
247  // page 2: "signature command" requester and label:
248  ++pageno;
249  page = new QWidget( widgetStack );
250  widgetStack->insertWidget( pageno, page );
251  page_vlay = new QVBoxLayout( page );
252  page_vlay->setMargin( 0 );
253  hlay = new QHBoxLayout(); // inherits spacing
254  page_vlay->addLayout( hlay );
255  q->mCommandEdit = new KLineEdit( page );
256  q->mCommandEdit->setCompletionObject( new KShellCompletion() );
257  q->mCommandEdit->setAutoDeleteCompletionObject( true );
258  q->mCommandEdit->setWhatsThis(
259  i18n( "You can add an arbitrary command here, either with or without path "
260  "depending on whether or not the command is in your Path. For every "
261  "new mail, KMail will execute the command and use what it outputs (to "
262  "standard output) as a signature. Usual commands for use with this "
263  "mechanism are \"fortune\" or \"ksig -random\"." ) );
264  label = new QLabel( i18n( "S&pecify command:" ), page );
265  label->setBuddy( q->mCommandEdit );
266  hlay->addWidget( label );
267  hlay->addWidget( q->mCommandEdit, 1 );
268  page_vlay->addStretch( 1 ); // spacer
269 }
270 
271  SignatureConfigurator::SignatureConfigurator( QWidget * parent )
272  : QWidget( parent ), d( new Private( this ) )
273  {
274  d->init();
275  }
276 
277  SignatureConfigurator::~SignatureConfigurator()
278  {
279  delete d;
280  }
281 
282  bool SignatureConfigurator::isSignatureEnabled() const
283  {
284  return mEnableCheck->isChecked();
285  }
286 
287  void SignatureConfigurator::setSignatureEnabled( bool enable )
288  {
289  mEnableCheck->setChecked( enable );
290  }
291 
292  Signature::Type SignatureConfigurator::signatureType() const
293  {
294  switch ( mSourceCombo->currentIndex() ) {
295  case 0: return Signature::Inlined;
296  case 1: return Signature::FromFile;
297  case 2: return Signature::FromCommand;
298  default: return Signature::Disabled;
299  }
300  }
301 
302  void SignatureConfigurator::setSignatureType( Signature::Type type )
303  {
304  int idx = 0;
305  switch ( type ) {
306  case Signature::Inlined: idx = 0; break;
307  case Signature::FromFile: idx = 1; break;
308  case Signature::FromCommand: idx = 2; break;
309  default: idx = 0; break;
310  };
311 
312  mSourceCombo->setCurrentIndex( idx );
313  }
314 
315  void SignatureConfigurator::setInlineText( const QString & text )
316  {
317  mTextEdit->setTextOrHtml( text );
318  }
319 
320  QString SignatureConfigurator::fileURL() const
321  {
322  QString file = mFileRequester->url().path();
323 
324  // Force the filename to be relative to ~ instead of $PWD depending
325  // on the rest of the code (KRun::run in Edit and KFileItem on save)
326  if ( !file.isEmpty() && QFileInfo( file ).isRelative() ) {
327  file = QDir::home().absolutePath() + QDir::separator() + file;
328  }
329  return file;
330  }
331 
332  void SignatureConfigurator::setFileURL( const QString & url )
333  {
334  mFileRequester->setUrl( QUrl(url) );
335  }
336 
337  QString SignatureConfigurator::commandURL() const
338  {
339  return mCommandEdit->text();
340  }
341 
342  void SignatureConfigurator::setCommandURL( const QString & url )
343  {
344  mCommandEdit->setText( url );
345  }
346 
347 
348  Signature SignatureConfigurator::signature() const
349  {
350  Signature sig;
351  const Signature::Type sigType = signatureType();
352  switch ( sigType ) {
353  case Signature::Inlined:
354  sig.setInlinedHtml( d->inlinedHtml );
355  sig.setText( d->inlinedHtml ? asCleanedHTML() : mTextEdit->textOrHtml() );
356  if ( d->inlinedHtml ) {
357  if ( !d->imageLocation.isEmpty() ) {
358  sig.setImageLocation( d->imageLocation );
359  }
360  KPIMTextEdit::ImageWithNameList images = static_cast< KPIMTextEdit::TextEdit*>( mTextEdit )->imagesWithName();
361  foreach ( const KPIMTextEdit::ImageWithNamePtr &image, images ) {
362  sig.addImage( image->image, image->name );
363  }
364  }
365  break;
366  case Signature::FromCommand:
367  sig.setUrl( commandURL(), true );
368  break;
369  case Signature::FromFile:
370  sig.setUrl( fileURL(), false );
371  break;
372  case Signature::Disabled:
373  /* do nothing */
374  break;
375  }
376  sig.setEnabledSignature( isSignatureEnabled() );
377  sig.setType( sigType );
378  return sig;
379  }
380 
381  void SignatureConfigurator::setSignature( const Signature & sig )
382  {
383  setSignatureType( sig.type() );
384  setSignatureEnabled( sig.isEnabledSignature() );
385 
386  if ( sig.isInlinedHtml() ) {
387  mHtmlCheck->setCheckState( Qt::Checked );
388  } else {
389  mHtmlCheck->setCheckState( Qt::Unchecked );
390  }
391  slotSetHtml();
392 
393  // Let insertIntoTextEdit() handle setting the text, as that function also adds the images.
394  mTextEdit->clear();
395  KPIMTextEdit::TextEdit * const pimEdit = static_cast<KPIMTextEdit::TextEdit*>( mTextEdit );
396  sig.insertIntoTextEdit( KPIMIdentities::Signature::Start, KPIMIdentities::Signature::AddNothing,
397  pimEdit, true );
398  if ( sig.type() == Signature::FromFile ) {
399  setFileURL( sig.url() );
400  } else {
401  setFileURL( QString() );
402  }
403 
404  if ( sig.type() == Signature::FromCommand ) {
405  setCommandURL( sig.url() );
406  } else {
407  setCommandURL( QString() );
408  }
409  }
410 
411  void SignatureConfigurator::slotEnableEditButton( const QString & url )
412  {
413  mEditButton->setDisabled( url.trimmed().isEmpty() );
414  }
415 
416  void SignatureConfigurator::slotEdit()
417  {
418  QString url = fileURL();
419  // slotEnableEditButton should prevent this assert from being hit:
420  assert( !url.isEmpty() );
421 
422  (void)KRun::runUrl( KUrl( url ), QString::fromLatin1( "text/plain" ), this );
423  }
424 
425  QString SignatureConfigurator::asCleanedHTML() const
426  {
427  QString text = mTextEdit->toHtml();
428 
429  // Beautiful little hack to find the html headers produced by Qt.
430  QTextDocument textDocument;
431  QString html = textDocument.toHtml();
432 
433  // Now remove each line from the text, the result is clean html.
434  foreach ( const QString& line, html.split( QLatin1Char('\n') ) ) {
435  text.remove( line + QLatin1Char('\n') );
436  }
437  return text;
438  }
439 
440  // "use HTML"-checkbox (un)checked
441  void SignatureConfigurator::slotSetHtml()
442  {
443  if ( mHtmlCheck->checkState() == Qt::Unchecked ) {
444  mHtmlCheck->setText( i18n( "&Use HTML" ) );
445 #ifndef QT_NO_TOOLBAR
446  mEditToolBar->setVisible( false );
447  mEditToolBar->setEnabled( false );
448  mFormatToolBar->setVisible( false );
449  mFormatToolBar->setEnabled( false );
450 #endif
451  mTextEdit->switchToPlainText();
452  d->inlinedHtml = false;
453  }
454  else {
455  mHtmlCheck->setText( i18n( "&Use HTML (disabling removes formatting)" ) );
456  d->inlinedHtml = true;
457 #ifndef QT_NO_TOOLBAR
458  mEditToolBar->setVisible( true );
459  mEditToolBar->setEnabled( true );
460  mFormatToolBar->setVisible( true );
461  mFormatToolBar->setEnabled( true );
462 #endif
463  mTextEdit->enableRichTextMode();
464  }
465  }
466 
467  void SignatureConfigurator::setImageLocation ( const QString& path )
468  {
469  d->imageLocation = path;
470  }
471 
472  void SignatureConfigurator::setImageLocation( const Identity &identity )
473  {
474  const QString dir = QString::fromLatin1( "emailidentities/%1/" ).arg(
475  QString::number( identity.uoid() ) );
476  setImageLocation( KStandardDirs::locateLocal( "data", dir ) );
477  }
478 
479 }
480 
KPIMIdentities::SignatureConfigurator::fileURL
QString fileURL() const
Returns the file url which the user wants to use as a signature.
Definition: signatureconfigurator.cpp:320
KPIMIdentities::Signature::AddNothing
Don't add any text to the signature.
Definition: signature.h:224
KPIMIdentities::SignatureConfigurator::setFileURL
void setFileURL(const QString &url)
Set url for the file url part of the widget.
Definition: signatureconfigurator.cpp:332
KPIMIdentities::Signature::Start
The signature is placed at the start of the textedit.
Definition: signature.h:110
KPIMIdentities::Signature::insertIntoTextEdit
void KPIMIDENTITIES_DEPRECATED insertIntoTextEdit(KRichTextEdit *textEdit, Placement placement=End, bool addSeparator=true)
Definition: signature.cpp:506
KPIMIdentities::SignatureConfigurator::commandURL
QString commandURL() const
Returns the url of the command which the users wants to use as signature.
Definition: signatureconfigurator.cpp:337
KPIMIdentities::Signature::setText
void setText(const QString &text)
Set the signature text and mark this signature as being of "inline text" type.
Definition: signature.cpp:665
KPIMIdentities::SignatureConfigurator::setSignatureType
void setSignatureType(Signature::Type type)
Set the signature type to type.
Definition: signatureconfigurator.cpp:302
KPIMIdentities::SignatureConfigurator::setImageLocation
void setImageLocation(const QString &path)
Sets the directory where the images used in the HTML signature will be stored.
Definition: signatureconfigurator.cpp:467
KPIMIdentities::SignatureConfigurator::setCommandURL
void setCommandURL(const QString &url)
Sets url as the command to execute.
Definition: signatureconfigurator.cpp:342
KPIMIdentities::Signature::setImageLocation
void setImageLocation(const QString &path)
Sets the location where the copies of the signature images will be stored.
Definition: signature.cpp:641
KPIMIdentities::Identity::uoid
uint uoid() const
Unique Object Identifier for this identity.
Definition: identity.cpp:345
KPIMIdentities::Signature::setEnabledSignature
void setEnabledSignature(bool enabled)
setEnabledSignature
Definition: signature.cpp:677
KPIMIdentities::Signature::isInlinedHtml
bool isInlinedHtml() const
Definition: signature.cpp:273
KPIMIdentities::Signature::setInlinedHtml
void setInlinedHtml(bool isHtml)
Sets the inlined signature to text or html.
Definition: signature.cpp:268
KPIMIdentities::SignatureConfigurator::setSignatureEnabled
void setSignatureEnabled(bool enable)
Use this to activate the signature.
Definition: signatureconfigurator.cpp:287
KPIMIdentities::Signature
Abstraction of a signature (aka "footer").
Definition: signature.h:89
KPIMIdentities::Identity
User identity information.
Definition: identity.h:82
KPIMIdentities::SignatureConfigurator
This widget gives an interface so users can edit their signature.
Definition: signatureconfigurator.h:48
KPIMIdentities::Signature::Type
Type
Type of signature (ie.
Definition: signature.h:98
KPIMIdentities::SignatureConfigurator::setInlineText
void setInlineText(const QString &text)
Make text the text for the signature.
Definition: signatureconfigurator.cpp:315
KPIMIdentities::SignatureConfigurator::setSignature
void setSignature(const Signature &sig)
Convenience method.
Definition: signatureconfigurator.cpp:381
KPIMIdentities::SignatureConfigurator::SignatureConfigurator
SignatureConfigurator(QWidget *parent=0)
Constructor.
Definition: signatureconfigurator.cpp:271
KPIMIdentities::SignatureConfigurator::signatureType
Signature::Type signatureType() const
This returns the type of the signature, so that can be Disabled, Inline, fromFile, etc.
Definition: signatureconfigurator.cpp:292
KPIMIdentities::Signature::setUrl
void setUrl(const QString &url, bool isExecutable=false)
Set the signature URL and mark this signature as being of "from file" resp.
Definition: signature.cpp:262
KPIMIdentities::Signature::type
Type type() const
Definition: signature.cpp:658
KPIMIdentities::Signature::addImage
void addImage(const QImage &image, const QString &imageName)
Adds the given image to the signature.
Definition: signature.cpp:632
KPIMIdentities::SignatureConfigurator::isSignatureEnabled
bool isSignatureEnabled() const
Indicated if the user wants a signature.
Definition: signatureconfigurator.cpp:282
KPIMIdentities::SignatureConfigurator::~SignatureConfigurator
virtual ~SignatureConfigurator()
destructor
Definition: signatureconfigurator.cpp:277
KPIMIdentities::SignatureConfigurator::signature
Signature signature() const
Conveniece method.
Definition: signatureconfigurator.cpp:348
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:01:12 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kpimidentities

Skip menu "kpimidentities"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Members
  • File List
  • Related Pages

kdepimlibs API Reference

Skip menu "kdepimlibs API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kldap
  • kmbox
  • kmime
  • kpimidentities
  • kpimtextedit
  • kresources
  • ktnef
  • kxmlrpcclient
  • microblog

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