summaryrefslogtreecommitdiffstats
path: root/kmail/templatesconfiguration.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch)
tree67208f7c145782a7e90b123b982ca78d88cc2c87 /kmail/templatesconfiguration.cpp
downloadtdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz
tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kmail/templatesconfiguration.cpp')
-rw-r--r--kmail/templatesconfiguration.cpp561
1 files changed, 561 insertions, 0 deletions
diff --git a/kmail/templatesconfiguration.cpp b/kmail/templatesconfiguration.cpp
new file mode 100644
index 00000000..bc09eff4
--- /dev/null
+++ b/kmail/templatesconfiguration.cpp
@@ -0,0 +1,561 @@
+/* -*- mode: C++; c-file-style: "gnu" -*-
+ * kmail: KDE mail client
+ * This file: Copyright (C) 2006 Dmitry Morozhnikov
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <config.h>
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qtextedit.h>
+#include <qlineedit.h>
+#include <qtoolbox.h>
+#include <kdebug.h>
+#include <qfont.h>
+#include <kactivelabel.h>
+
+#include "templatesconfiguration_base.h"
+#include "templatesconfiguration_kfg.h"
+#include "globalsettings.h"
+#include "replyphrases.h"
+
+#include "templatesconfiguration.h"
+
+TemplatesConfiguration::TemplatesConfiguration( QWidget *parent, const char *name )
+ :TemplatesConfigurationBase( parent, name )
+{
+ QFont f = KGlobalSettings::fixedFont();
+ textEdit_new->setFont( f );
+ textEdit_reply->setFont( f );
+ textEdit_reply_all->setFont( f );
+ textEdit_forward->setFont( f );
+
+ setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+ sizeHint();
+
+ connect( textEdit_new, SIGNAL( textChanged() ),
+ this, SLOT( slotTextChanged( void ) ) );
+ connect( textEdit_reply, SIGNAL( textChanged() ),
+ this, SLOT( slotTextChanged( void ) ) );
+ connect( textEdit_reply_all, SIGNAL( textChanged() ),
+ this, SLOT( slotTextChanged( void ) ) );
+ connect( textEdit_forward, SIGNAL( textChanged() ),
+ this, SLOT( slotTextChanged( void ) ) );
+ connect( lineEdit_quote, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( slotTextChanged( void ) ) );
+
+ connect( mInsertCommand, SIGNAL( insertCommand(QString, int) ),
+ this, SLOT( slotInsertCommand(QString, int) ) );
+
+ QString help;
+ if ( QString( name ) == "folder-templates" ) {
+ help =
+ i18n( "<qt>"
+ "<p>Here you can create message templates to use when you "
+ "compose new messages or replies, or when you forward messages.</p>"
+ "<p>The message templates support substitution commands "
+ "by simple typing them or selecting them from menu "
+ "<i>Insert command</i>.</p>"
+ "<p>Templates specified here are folder-specific. "
+ "They override both global templates and per-identity "
+ "templates if they are specified.</p>"
+ "</qt>" );
+ } else if ( QString( name ) == "identity-templates" ) {
+ help =
+ i18n( "<qt>"
+ "<p>Here you can create message templates to use when you "
+ "compose new messages or replies, or when you forward messages.</p>"
+ "<p>The message templates support substitution commands "
+ "by simple typing them or selecting them from menu "
+ "<i>Insert command</i>.</p>"
+ "<p>Templates specified here are mail identity-wide. "
+ "They override global templates and are being overridden by per-folder "
+ "templates if they are specified.</p>"
+ "</qt>" );
+ } else {
+ help =
+ i18n( "<qt>"
+ "<p>Here you can create message templates to use when you "
+ "compose new messages or replies, or when you forward messages.</p>"
+ "<p>The message templates support substitution commands "
+ "by simple typing them or selecting them from menu "
+ "<i>Insert command</i>.</p>"
+ "<p>This is a global (default) template. They can be overridden "
+ "by per-identity templates and by per-folder templates "
+ "if they are specified.</p>"
+ "</qt>" );
+ }
+ mHelp->setText( i18n( "<a href=\"whatsthis:%1\">How does this work?</a>" ).arg( help ) );
+}
+
+void TemplatesConfiguration::slotTextChanged()
+{
+ emit changed();
+}
+
+void TemplatesConfiguration::loadFromGlobal()
+{
+ if ( !GlobalSettings::self()->phrasesConverted() ) {
+ kdDebug() << "Phrases to templates conversion" << endl;
+ importFromPhrases();
+ }
+
+ QString str;
+ str = GlobalSettings::self()->templateNewMessage();
+ if ( str.isEmpty() ) {
+ textEdit_new->setText( defaultNewMessage() );
+ } else {
+ textEdit_new->setText(str);
+ }
+ str = GlobalSettings::self()->templateReply();
+ if ( str.isEmpty() ) {
+ textEdit_reply->setText( defaultReply() );
+ } else {
+ textEdit_reply->setText( str );
+ }
+ str = GlobalSettings::self()->templateReplyAll();
+ if ( str.isEmpty() ) {
+ textEdit_reply_all->setText( defaultReplyAll() );
+ } else {
+ textEdit_reply_all->setText( str );
+ }
+ str = GlobalSettings::self()->templateForward();
+ if ( str.isEmpty() ) {
+ textEdit_forward->setText( defaultForward() );
+ } else {
+ textEdit_forward->setText( str );
+ }
+ str = GlobalSettings::self()->quoteString();
+ if ( str.isEmpty() ) {
+ lineEdit_quote->setText( defaultQuoteString() );
+ } else {
+ lineEdit_quote->setText( str );
+ }
+}
+
+void TemplatesConfiguration::saveToGlobal()
+{
+ GlobalSettings::self()->setTemplateNewMessage( strOrBlank( textEdit_new->text() ) );
+ GlobalSettings::self()->setTemplateReply( strOrBlank( textEdit_reply->text() ) );
+ GlobalSettings::self()->setTemplateReplyAll( strOrBlank( textEdit_reply_all->text() ) );
+ GlobalSettings::self()->setTemplateForward( strOrBlank( textEdit_forward->text() ) );
+ GlobalSettings::self()->setQuoteString( lineEdit_quote->text() );
+ GlobalSettings::self()->setPhrasesConverted( true );
+ GlobalSettings::self()->writeConfig();
+}
+
+void TemplatesConfiguration::loadFromIdentity( uint id )
+{
+ Templates t( QString("IDENTITY_%1").arg( id ) );
+
+ QString str;
+
+ str = t.templateNewMessage();
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->templateNewMessage();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultNewMessage();
+ }
+ textEdit_new->setText( str );
+
+ str = t.templateReply();
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->templateReply();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultReply();
+ }
+ textEdit_reply->setText( str );
+
+ str = t.templateReplyAll();
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->templateReplyAll();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultReplyAll();
+ }
+ textEdit_reply_all->setText( str );
+
+ str = t.templateForward();
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->templateForward();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultForward();
+ }
+ textEdit_forward->setText( str );
+
+ str = t.quoteString();
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->quoteString();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultQuoteString();
+ }
+ lineEdit_quote->setText( str );
+}
+
+void TemplatesConfiguration::saveToIdentity( uint id )
+{
+ Templates t( QString("IDENTITY_%1").arg( id ) );
+
+ t.setTemplateNewMessage( strOrBlank( textEdit_new->text() ) );
+ t.setTemplateReply( strOrBlank( textEdit_reply->text() ) );
+ t.setTemplateReplyAll( strOrBlank( textEdit_reply_all->text() ) );
+ t.setTemplateForward( strOrBlank( textEdit_forward->text() ) );
+ t.setQuoteString( lineEdit_quote->text() );
+ t.writeConfig();
+}
+
+void TemplatesConfiguration::loadFromFolder( QString id, uint identity )
+{
+ Templates t( id );
+ Templates* tid = 0;
+
+ if ( identity ) {
+ tid = new Templates( QString("IDENTITY_%1").arg( identity ) );
+ }
+
+ QString str;
+
+ str = t.templateNewMessage();
+ if ( str.isEmpty() && tid ) {
+ str = tid->templateNewMessage();
+ }
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->templateNewMessage();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultNewMessage();
+ }
+ textEdit_new->setText( str );
+
+ str = t.templateReply();
+ if ( str.isEmpty() && tid ) {
+ str = tid->templateReply();
+ }
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->templateReply();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultReply();
+ }
+ textEdit_reply->setText( str );
+
+ str = t.templateReplyAll();
+ if ( str.isEmpty() && tid ) {
+ str = tid->templateReplyAll();
+ }
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->templateReplyAll();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultReplyAll();
+ }
+ textEdit_reply_all->setText( str );
+
+ str = t.templateForward();
+ if ( str.isEmpty() && tid ) {
+ str = tid->templateForward();
+ }
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->templateForward();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultForward();
+ }
+ textEdit_forward->setText( str );
+
+ str = t.quoteString();
+ if ( str.isEmpty() && tid ) {
+ str = tid->quoteString();
+ }
+ if ( str.isEmpty() ) {
+ str = GlobalSettings::self()->quoteString();
+ }
+ if ( str.isEmpty() ) {
+ str = defaultQuoteString();
+ }
+ lineEdit_quote->setText( str );
+
+ delete(tid);
+}
+
+void TemplatesConfiguration::saveToFolder( QString id )
+{
+ Templates t( id );
+
+ t.setTemplateNewMessage( strOrBlank( textEdit_new->text() ) );
+ t.setTemplateReply( strOrBlank( textEdit_reply->text() ) );
+ t.setTemplateReplyAll( strOrBlank( textEdit_reply_all->text() ) );
+ t.setTemplateForward( strOrBlank( textEdit_forward->text() ) );
+ t.setQuoteString( lineEdit_quote->text() );
+ t.writeConfig();
+}
+
+void TemplatesConfiguration::loadFromPhrases()
+{
+ int currentNr = GlobalSettings::self()->replyCurrentLanguage();
+
+ ReplyPhrases replyPhrases( QString::number( currentNr ) );
+
+ textEdit_new->setText( defaultNewMessage() );
+
+ QString str;
+
+ str = replyPhrases.phraseReplySender();
+ if ( !str.isEmpty() ) {
+ textEdit_reply->setText( convertPhrases( str ) + "\n%QUOTE\n%CURSOR\n" );
+ }
+ else {
+ textEdit_reply->setText( defaultReply() );
+ }
+
+ str = replyPhrases.phraseReplyAll();
+ if ( !str.isEmpty() ) {
+ textEdit_reply_all->setText( convertPhrases( str ) + "\n%QUOTE\n%CURSOR\n" );
+ }
+ else {
+ textEdit_reply_all->setText( defaultReplyAll() );
+ }
+
+ str = replyPhrases.phraseForward();
+ if ( !str.isEmpty() ) {
+ textEdit_forward->setText( QString( i18n(
+ "%REM=\"Default forward template\"%-\n"
+ "---------- %1 ----------\n"
+ "%TEXT\n"
+ "-------------------------------------------------------\n"
+ ) ).arg( convertPhrases( str ) ) );
+ }
+ else {
+ textEdit_forward->setText( defaultForward() );
+ }
+
+ str = replyPhrases.indentPrefix();
+ if ( !str.isEmpty() ) {
+ // no need to convert indentPrefix() because it is passed to KMMessage::asQuotedString() as is
+ lineEdit_quote->setText( str );
+ }
+ else {
+ lineEdit_quote->setText( defaultQuoteString() );
+ }
+}
+
+void TemplatesConfiguration::importFromPhrases()
+{
+ kdDebug() << "TemplatesConfiguration::importFromPhrases()" << endl;
+
+ int currentNr = GlobalSettings::self()->replyCurrentLanguage();
+
+ ReplyPhrases replyPhrases( QString::number( currentNr ) );
+
+ QString str;
+
+ str = replyPhrases.phraseReplySender();
+ if ( !str.isEmpty() ) {
+ GlobalSettings::self()->setTemplateReply( convertPhrases( str ) + "\n%QUOTE\n%CURSOR\n" );
+ }
+ else {
+ GlobalSettings::self()->setTemplateReply( defaultReply() );
+ }
+
+ str = replyPhrases.phraseReplyAll();
+ if ( !str.isEmpty() ) {
+ GlobalSettings::self()->setTemplateReplyAll( convertPhrases( str ) + "\n%QUOTE\n%CURSOR\n" );
+ }
+ else {
+ GlobalSettings::self()->setTemplateReplyAll( defaultReplyAll() );
+ }
+
+ str = replyPhrases.phraseForward();
+ if ( !str.isEmpty() ) {
+ GlobalSettings::self()->setTemplateForward( QString( i18n(
+ "%REM=\"Default forward template\"%-\n"
+ "\n"
+ "---------- %1 ----------\n"
+ "\n"
+ "Subject: %OFULLSUBJECT\n"
+ "Date: %ODATE\n"
+ "From: %OFROMADDR\n"
+ "To: %OTOADDR\n"
+ "\n"
+ "%TEXT\n"
+ "-------------------------------------------------------\n"
+ ) ).arg( convertPhrases( str ) ) );
+ }
+ else {
+ GlobalSettings::self()->setTemplateForward( defaultForward() );
+ }
+
+ str = replyPhrases.indentPrefix();
+ if ( !str.isEmpty() ) {
+ // no need to convert indentPrefix() because it is passed to KMMessage::asQuotedString() as is
+ GlobalSettings::self()->setQuoteString( str );
+ }
+ else {
+ GlobalSettings::self()->setQuoteString( defaultQuoteString() );
+ }
+
+ GlobalSettings::self()->setPhrasesConverted( true );
+ GlobalSettings::self()->writeConfig();
+}
+
+QString TemplatesConfiguration::convertPhrases( QString &str )
+{
+ QString result;
+ QChar ch;
+
+ unsigned int strLength( str.length() );
+ for ( uint i = 0; i < strLength; ) {
+ ch = str[i++];
+ if ( ch == '%' ) {
+ ch = str[i++];
+ switch ( (char)ch ) {
+ case 'D':
+ result += "%ODATE";
+ break;
+ case 'e':
+ result += "%OFROMADDR";
+ break;
+ case 'F':
+ result += "%OFROMNAME";
+ break;
+ case 'f':
+ // is this used for something like FIDO quotes, like "AB>" ?
+ // not supported right now
+ break;
+ case 'T':
+ result += "%OTONAME";
+ break;
+ case 't':
+ result += "%OTOADDR";
+ break;
+ case 'C':
+ result += "%OCCNAME";
+ break;
+ case 'c':
+ result += "%OCCADDR";
+ break;
+ case 'S':
+ result += "%OFULLSUBJECT";
+ break;
+ case '_':
+ result += ' ';
+ break;
+ case 'L':
+ result += "\n";
+ break;
+ case '%':
+ result += "%%";
+ break;
+ default:
+ result += '%';
+ result += ch;
+ break;
+ }
+ } else
+ result += ch;
+ }
+ return result;
+}
+
+void TemplatesConfiguration::slotInsertCommand( QString cmd, int adjustCursor )
+{
+ QTextEdit* edit;
+
+ if( toolBox1->currentItem() == page_new ) {
+ edit = textEdit_new;
+ } else if( toolBox1->currentItem() == page_reply ) {
+ edit = textEdit_reply;
+ } else if( toolBox1->currentItem() == page_reply_all ) {
+ edit = textEdit_reply_all;
+ } else if( toolBox1->currentItem() == page_forward ) {
+ edit = textEdit_forward;
+ } else {
+ kdDebug() << "Unknown current page in TemplatesConfiguration!" << endl;
+ return;
+ }
+
+ // kdDebug() << "Insert command: " << cmd << endl;
+
+ int para, index;
+ edit->getCursorPosition( &para, &index );
+ edit->insertAt( cmd, para, index );
+
+ index += adjustCursor;
+
+ edit->setCursorPosition( para, index + cmd.length() );
+}
+
+QString TemplatesConfiguration::defaultNewMessage() {
+ return i18n(
+ "%REM=\"Default new message template\"%-\n"
+ "%BLANK"
+ );
+}
+
+QString TemplatesConfiguration::defaultReply() {
+ return i18n(
+ "%REM=\"Default reply template\"%-\n"
+ "On %ODATEEN %OTIMELONGEN you wrote:\n"
+ "%QUOTE\n"
+ "%CURSOR\n"
+ );
+}
+
+QString TemplatesConfiguration::defaultReplyAll() {
+ return i18n(
+ "%REM=\"Default reply all template\"%-\n"
+ "On %ODATEEN %OTIMELONGEN %OFROMNAME wrote:\n"
+ "%QUOTE\n"
+ "%CURSOR\n"
+ );
+}
+
+QString TemplatesConfiguration::defaultForward() {
+ return i18n(
+ "%REM=\"Default forward template\"%-\n"
+ "\n"
+ "---------- Forwarded Message ----------\n"
+ "\n"
+ "Subject: %OFULLSUBJECT\n"
+ "Date: %ODATE\n"
+ "From: %OFROMADDR\n"
+ "To: %OTOADDR\n"
+ "\n"
+ "%TEXT\n"
+ "-------------------------------------------------------\n"
+ );
+}
+
+QString TemplatesConfiguration::defaultQuoteString() {
+ return "> ";
+}
+
+QString TemplatesConfiguration::strOrBlank( QString str ) {
+ if ( str.stripWhiteSpace().isEmpty() ) {
+ return QString( "%BLANK" );
+ }
+ return str;
+}
+
+#include "templatesconfiguration.moc"