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

kpimidentities

  • 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
54using namespace KPIMIdentities;
55
56namespace KPIMIdentities {
57
62//@cond PRIVATE
63class 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
75SignatureConfigurator::Private::Private( SignatureConfigurator *parent )
76 :q( parent ), inlinedHtml( true )
77{
78}
79
80void 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 page_vlay->setMargin(0);
147
148#ifndef QT_NO_TOOLBAR
149 q->mEditToolBar = new KToolBar( q );
150 q->mEditToolBar->setToolButtonStyle( Qt::ToolButtonIconOnly );
151 page_vlay->addWidget( q->mEditToolBar, 0 );
152
153 q->mFormatToolBar = new KToolBar( q );
154 q->mFormatToolBar->setToolButtonStyle( Qt::ToolButtonIconOnly );
155 page_vlay->addWidget( q->mFormatToolBar, 1 );
156#endif
157
158 q->mTextEdit = new KPIMTextEdit::TextEdit( q );
159 static_cast<KPIMTextEdit::TextEdit*>( q->mTextEdit )->enableImageActions();
160 static_cast<KPIMTextEdit::TextEdit*>( q->mTextEdit )->enableInsertHtmlActions();
161 static_cast<KPIMTextEdit::TextEdit*>( q->mTextEdit )->enableInsertTableActions();
162 page_vlay->addWidget( q->mTextEdit, 2 );
163 q->mTextEdit->setWhatsThis( i18n( "Use this field to enter an arbitrary static signature." ) );
164 // exclude SupportToPlainText.
165 q->mTextEdit->setRichTextSupport( KRichTextWidget::FullTextFormattingSupport |
166 KRichTextWidget::FullListSupport |
167 KRichTextWidget::SupportAlignment |
168 KRichTextWidget::SupportRuleLine |
169 KRichTextWidget::SupportHyperlinks |
170 KRichTextWidget::SupportFormatPainting );
171
172 // Fill the toolbars.
173 KActionCollection *actionCollection = new KActionCollection( q );
174 q->mTextEdit->createActions( actionCollection );
175#ifndef QT_NO_TOOLBAR
176 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_bold") ) );
177 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_italic") ) );
178 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_underline") ) );
179 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_strikeout") ) );
180 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_foreground_color") ) );
181 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_text_background_color") ) );
182 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_font_family") ) );
183 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_font_size") ) );
184 q->mEditToolBar->addAction( actionCollection->action( QLatin1String("format_reset") ) );
185
186 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_list_style") ) );
187 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_list_indent_more") ) );
188 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_list_indent_less") ) );
189 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_list_indent_less") ) );
190 q->mFormatToolBar->addSeparator();
191
192 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_align_left") ) );
193 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_align_center") ) );
194 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_align_right") ) );
195 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_align_justify") ) );
196 q->mFormatToolBar->addSeparator();
197
198 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("insert_horizontal_rule") ) );
199 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("manage_link") ) );
200 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("format_painter") ) );
201
202 q->mFormatToolBar->addSeparator();
203 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("add_image") ) );
204 q->mFormatToolBar->addSeparator();
205 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("insert_html") ) );
206 q->mFormatToolBar->addAction( actionCollection->action( QLatin1String("insert_table" )) );
207#endif
208
209 hlay = new QHBoxLayout(); // inherits spacing
210 page_vlay->addLayout( hlay );
211 q->mHtmlCheck = new QCheckBox( i18n( "&Use HTML" ), page );
212 q->connect( q->mHtmlCheck, SIGNAL(clicked()),
213 q, SLOT(slotSetHtml()) );
214 hlay->addWidget( q->mHtmlCheck );
215 inlinedHtml = true;
216
217 widgetStack->setCurrentIndex( 0 ); // since mSourceCombo->currentItem() == 0
218
219 // page 1: "signature file" requester, label, "edit file" button:
220 ++pageno;
221 page = new QWidget( widgetStack );
222 widgetStack->insertWidget( pageno, page ); // force sequential numbers (play safe)
223 page_vlay = new QVBoxLayout( page );
224 page_vlay->setMargin( 0 );
225 hlay = new QHBoxLayout(); // inherits spacing
226 page_vlay->addLayout( hlay );
227 q->mFileRequester = new KUrlRequester( page );
228 q->mFileRequester->setWhatsThis(
229 i18n( "Use this requester to specify a text file that contains your "
230 "signature. It will be read every time you create a new mail or "
231 "append a new signature." ) );
232 label = new QLabel( i18n( "S&pecify file:" ), page );
233 label->setBuddy( q->mFileRequester );
234 hlay->addWidget( label );
235 hlay->addWidget( q->mFileRequester, 1 );
236 q->mFileRequester->button()->setAutoDefault( false );
237 q->connect( q->mFileRequester, SIGNAL(textChanged(QString)),
238 q, SLOT(slotEnableEditButton(QString)) );
239 q->mEditButton = new QPushButton( i18n( "Edit &File" ), page );
240 q->mEditButton->setWhatsThis( i18n( "Opens the specified file in a text editor." ) );
241 q->connect( q->mEditButton, SIGNAL(clicked()),
242 q, SLOT(slotEdit()) );
243 q->mEditButton->setAutoDefault( false );
244 q->mEditButton->setEnabled( false ); // initially nothing to edit
245 hlay->addWidget( q->mEditButton );
246 page_vlay->addStretch( 1 ); // spacer
247
248 // page 2: "signature command" requester and label:
249 ++pageno;
250 page = new QWidget( widgetStack );
251 widgetStack->insertWidget( pageno, page );
252 page_vlay = new QVBoxLayout( page );
253 page_vlay->setMargin( 0 );
254 hlay = new QHBoxLayout(); // inherits spacing
255 page_vlay->addLayout( hlay );
256 q->mCommandEdit = new KLineEdit( page );
257 q->mCommandEdit->setClearButtonShown( true );
258 q->mCommandEdit->setCompletionObject( new KShellCompletion() );
259 q->mCommandEdit->setAutoDeleteCompletionObject( true );
260 q->mCommandEdit->setWhatsThis(
261 i18n( "You can add an arbitrary command here, either with or without path "
262 "depending on whether or not the command is in your Path. For every "
263 "new mail, KMail will execute the command and use what it outputs (to "
264 "standard output) as a signature. Usual commands for use with this "
265 "mechanism are \"fortune\" or \"ksig -random\"." ) );
266 label = new QLabel( i18n( "S&pecify command:" ), page );
267 label->setBuddy( q->mCommandEdit );
268 hlay->addWidget( label );
269 hlay->addWidget( q->mCommandEdit, 1 );
270 page_vlay->addStretch( 1 ); // spacer
271}
272
273 SignatureConfigurator::SignatureConfigurator( QWidget * parent )
274 : QWidget( parent ), d( new Private( this ) )
275 {
276 d->init();
277 }
278
279 SignatureConfigurator::~SignatureConfigurator()
280 {
281 delete d;
282 }
283
284 bool SignatureConfigurator::isSignatureEnabled() const
285 {
286 return mEnableCheck->isChecked();
287 }
288
289 void SignatureConfigurator::setSignatureEnabled( bool enable )
290 {
291 mEnableCheck->setChecked( enable );
292 }
293
294 Signature::Type SignatureConfigurator::signatureType() const
295 {
296 switch ( mSourceCombo->currentIndex() ) {
297 case 0: return Signature::Inlined;
298 case 1: return Signature::FromFile;
299 case 2: return Signature::FromCommand;
300 default: return Signature::Disabled;
301 }
302 }
303
304 void SignatureConfigurator::setSignatureType( Signature::Type type )
305 {
306 int idx = 0;
307 switch ( type ) {
308 case Signature::Inlined: idx = 0; break;
309 case Signature::FromFile: idx = 1; break;
310 case Signature::FromCommand: idx = 2; break;
311 default: idx = 0; break;
312 };
313
314 mSourceCombo->setCurrentIndex( idx );
315 }
316
317 void SignatureConfigurator::setInlineText( const QString & text )
318 {
319 mTextEdit->setTextOrHtml( text );
320 }
321
322 QString SignatureConfigurator::fileURL() const
323 {
324 QString file = mFileRequester->url().path();
325
326 // Force the filename to be relative to ~ instead of $PWD depending
327 // on the rest of the code (KRun::run in Edit and KFileItem on save)
328 if ( !file.isEmpty() && QFileInfo( file ).isRelative() ) {
329 file = QDir::home().absolutePath() + QDir::separator() + file;
330 }
331 return file;
332 }
333
334 void SignatureConfigurator::setFileURL( const QString & url )
335 {
336 mFileRequester->setUrl( QUrl(url) );
337 }
338
339 QString SignatureConfigurator::commandURL() const
340 {
341 return mCommandEdit->text();
342 }
343
344 void SignatureConfigurator::setCommandURL( const QString & url )
345 {
346 mCommandEdit->setText( url );
347 }
348
349
350 Signature SignatureConfigurator::signature() const
351 {
352 Signature sig;
353 const Signature::Type sigType = signatureType();
354 switch ( sigType ) {
355 case Signature::Inlined:
356 sig.setInlinedHtml( d->inlinedHtml );
357 sig.setText( d->inlinedHtml ? asCleanedHTML() : mTextEdit->textOrHtml() );
358 if ( d->inlinedHtml ) {
359 if ( !d->imageLocation.isEmpty() ) {
360 sig.setImageLocation( d->imageLocation );
361 }
362 KPIMTextEdit::ImageWithNameList images = static_cast< KPIMTextEdit::TextEdit*>( mTextEdit )->imagesWithName();
363 foreach ( const KPIMTextEdit::ImageWithNamePtr &image, images ) {
364 sig.addImage( image->image, image->name );
365 }
366 }
367 break;
368 case Signature::FromCommand:
369 sig.setUrl( commandURL(), true );
370 break;
371 case Signature::FromFile:
372 sig.setUrl( fileURL(), false );
373 break;
374 case Signature::Disabled:
375 /* do nothing */
376 break;
377 }
378 sig.setEnabledSignature( isSignatureEnabled() );
379 sig.setType( sigType );
380 return sig;
381 }
382
383 void SignatureConfigurator::setSignature( const Signature & sig )
384 {
385 setSignatureType( sig.type() );
386 setSignatureEnabled( sig.isEnabledSignature() );
387
388 if ( sig.isInlinedHtml() ) {
389 mHtmlCheck->setCheckState( Qt::Checked );
390 } else {
391 mHtmlCheck->setCheckState( Qt::Unchecked );
392 }
393 slotSetHtml();
394
395 // Let insertIntoTextEdit() handle setting the text, as that function also adds the images.
396 mTextEdit->clear();
397 KPIMTextEdit::TextEdit * const pimEdit = static_cast<KPIMTextEdit::TextEdit*>( mTextEdit );
398 sig.insertIntoTextEdit( KPIMIdentities::Signature::Start, KPIMIdentities::Signature::AddNothing,
399 pimEdit, true );
400 if ( sig.type() == Signature::FromFile ) {
401 setFileURL( sig.url() );
402 } else {
403 setFileURL( QString() );
404 }
405
406 if ( sig.type() == Signature::FromCommand ) {
407 setCommandURL( sig.url() );
408 } else {
409 setCommandURL( QString() );
410 }
411 }
412
413 void SignatureConfigurator::slotEnableEditButton( const QString & url )
414 {
415 mEditButton->setDisabled( url.trimmed().isEmpty() );
416 }
417
418 void SignatureConfigurator::slotEdit()
419 {
420 QString url = fileURL();
421 // slotEnableEditButton should prevent this assert from being hit:
422 assert( !url.isEmpty() );
423
424 (void)KRun::runUrl( KUrl( url ), QString::fromLatin1( "text/plain" ), this );
425 }
426
427 QString SignatureConfigurator::asCleanedHTML() const
428 {
429 QString text = mTextEdit->toHtml();
430
431 // Beautiful little hack to find the html headers produced by Qt.
432 QTextDocument textDocument;
433 QString html = textDocument.toHtml();
434
435 // Now remove each line from the text, the result is clean html.
436 foreach ( const QString& line, html.split( QLatin1Char('\n') ) ) {
437 text.remove( line + QLatin1Char('\n') );
438 }
439 return text;
440 }
441
442 // "use HTML"-checkbox (un)checked
443 void SignatureConfigurator::slotSetHtml()
444 {
445 if ( mHtmlCheck->checkState() == Qt::Unchecked ) {
446 mHtmlCheck->setText( i18n( "&Use HTML" ) );
447#ifndef QT_NO_TOOLBAR
448 mEditToolBar->setVisible( false );
449 mEditToolBar->setEnabled( false );
450 mFormatToolBar->setVisible( false );
451 mFormatToolBar->setEnabled( false );
452#endif
453 mTextEdit->switchToPlainText();
454 d->inlinedHtml = false;
455 }
456 else {
457 mHtmlCheck->setText( i18n( "&Use HTML (disabling removes formatting)" ) );
458 d->inlinedHtml = true;
459#ifndef QT_NO_TOOLBAR
460 mEditToolBar->setVisible( true );
461 mEditToolBar->setEnabled( true );
462 mFormatToolBar->setVisible( true );
463 mFormatToolBar->setEnabled( true );
464#endif
465 mTextEdit->enableRichTextMode();
466 }
467 }
468
469 void SignatureConfigurator::setImageLocation ( const QString& path )
470 {
471 d->imageLocation = path;
472 }
473
474 void SignatureConfigurator::setImageLocation( const Identity &identity )
475 {
476 const QString dir = QString::fromLatin1( "emailidentities/%1/" ).arg(
477 QString::number( identity.uoid() ) );
478 setImageLocation( KStandardDirs::locateLocal( "data", dir ) );
479 }
480
481}
482
KPIMIdentities::Identity
User identity information.
Definition: identity.h:84
KPIMIdentities::Identity::uoid
uint uoid() const
Unique Object Identifier for this identity.
Definition: identity.cpp:334
KPIMIdentities::SignatureConfigurator
This widget gives an interface so users can edit their signature.
Definition: signatureconfigurator.h:49
KPIMIdentities::SignatureConfigurator::isSignatureEnabled
bool isSignatureEnabled() const
Indicated if the user wants a signature.
Definition: signatureconfigurator.cpp:284
KPIMIdentities::SignatureConfigurator::signatureType
Signature::Type signatureType() const
This returns the type of the signature, so that can be Disabled, Inline, fromFile,...
Definition: signatureconfigurator.cpp:294
KPIMIdentities::SignatureConfigurator::SignatureConfigurator
SignatureConfigurator(QWidget *parent=0)
Constructor.
Definition: signatureconfigurator.cpp:273
KPIMIdentities::SignatureConfigurator::setCommandURL
void setCommandURL(const QString &url)
Sets url as the command to execute.
Definition: signatureconfigurator.cpp:344
KPIMIdentities::SignatureConfigurator::setFileURL
void setFileURL(const QString &url)
Set url for the file url part of the widget.
Definition: signatureconfigurator.cpp:334
KPIMIdentities::SignatureConfigurator::commandURL
QString commandURL() const
Returns the url of the command which the users wants to use as signature.
Definition: signatureconfigurator.cpp:339
KPIMIdentities::SignatureConfigurator::signature
Signature signature() const
Conveniece method.
Definition: signatureconfigurator.cpp:350
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:469
KPIMIdentities::SignatureConfigurator::setInlineText
void setInlineText(const QString &text)
Make text the text for the signature.
Definition: signatureconfigurator.cpp:317
KPIMIdentities::SignatureConfigurator::fileURL
QString fileURL() const
Returns the file url which the user wants to use as a signature.
Definition: signatureconfigurator.cpp:322
KPIMIdentities::SignatureConfigurator::setSignature
void setSignature(const Signature &sig)
Convenience method.
Definition: signatureconfigurator.cpp:383
KPIMIdentities::SignatureConfigurator::setSignatureEnabled
void setSignatureEnabled(bool enable)
Use this to activate the signature.
Definition: signatureconfigurator.cpp:289
KPIMIdentities::SignatureConfigurator::~SignatureConfigurator
virtual ~SignatureConfigurator()
destructor
Definition: signatureconfigurator.cpp:279
KPIMIdentities::SignatureConfigurator::setSignatureType
void setSignatureType(Signature::Type type)
Set the signature type to type.
Definition: signatureconfigurator.cpp:304
KPIMIdentities::Signature
Abstraction of a signature (aka "footer").
Definition: signature.h:90
KPIMIdentities::Signature::insertIntoTextEdit
void KPIMIDENTITIES_DEPRECATED insertIntoTextEdit(KRichTextEdit *textEdit, Placement placement=End, bool addSeparator=true)
Definition: signature.cpp:507
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:666
KPIMIdentities::Signature::Start
@ Start
The signature is placed at the start of the textedit.
Definition: signature.h:110
KPIMIdentities::Signature::setImageLocation
void setImageLocation(const QString &path)
Sets the location where the copies of the signature images will be stored.
Definition: signature.cpp:642
KPIMIdentities::Signature::AddNothing
@ AddNothing
Don't add any text to the signature.
Definition: signature.h:224
KPIMIdentities::Signature::setInlinedHtml
void setInlinedHtml(bool isHtml)
Sets the inlined signature to text or html.
Definition: signature.cpp:268
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::isInlinedHtml
bool isInlinedHtml() const
Definition: signature.cpp:273
KPIMIdentities::Signature::setEnabledSignature
void setEnabledSignature(bool enabled)
setEnabledSignature
Definition: signature.cpp:678
KPIMIdentities::Signature::addImage
void addImage(const QImage &image, const QString &imageName)
Adds the given image to the signature.
Definition: signature.cpp:633
KPIMIdentities::Signature::type
Type type() const
Definition: signature.cpp:659
KPIMIdentities::Signature::Type
Type
Type of signature (ie.
Definition: signature.h:98
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Thu Jul 21 2022 00:00:00 by doxygen 1.9.5 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-4.14.10 API Reference

Skip menu "kdepimlibs-4.14.10 API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
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