From kmail-devel Fri Dec 31 06:12:04 2004 From: Don Sanders Date: Fri, 31 Dec 2004 06:12:04 +0000 To: kmail-devel Subject: [Bug 1015] kmail should have templates Message-Id: <20041231061204.13251.qmail () ktown ! kde ! org> X-MARC-Message: https://marc.info/?l=kmail-devel&m=110447356118290 ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. http://bugs.kde.org/show_bug.cgi?id=1015 ------- Additional Comments From don sanders org 2004-12-31 07:12 ------- CVS commit by sanders: Add an Insert Recent File action to the composer Message menu, as discussed with Ingo. This can act as a thrifty man's template system; put your often used phrases in descriptively named files and then quic kly insert them again using the Insert Recent File popup menu. Later on files with a specific suffix, say, .template could be passed for, say, '%' quoted commands like %DATE etc. Hopefully the implementation is ok. There's a bit of code to make sure the encoding used when inserting a recent file i s the same as when the file was inserted using the modified file dialog that includes an encoding combobox. Also some l ogic is required to stop the config file from growing without bound. CCMAIL:1015 bugs kde org M +2 -1 kmcomposerui.rc 1.37 M +52 -2 kmcomposewin.cpp 1.901 M +3 -0 kmcomposewin.h 1.268 --- kdepim/kmail/kmcomposerui.rc #1.36:1.37 @ -1,3 +1,3 @ - + @ -11,4 +11,5 @ + --- kdepim/kmail/kmcomposewin.h #1.267:1.268 @ -65,4 +65,5 @ class KToggleAction; class KSelectColorAction; class KURL; +class KRecentFilesAction; class SpellingFilter; class MessageComposer; @ -406,4 +407,5 @ public slots: void slotPrint(); void slotAttachFile(); + void slotInsertRecentFile(const KURL&); void slotSendNow(); void slotSendLater(); @ -824,4 +826,5 @ protected: KAction *mAttachPK, *mAttachMPK, *mAttachRemoveAction, *mAttachSaveAction, *mAttachPropertiesAction; + KRecentFilesAction *mRecentAction; KToggleAction *mSignAction, *mEncryptAction, *mRequestMDNAction; --- kdepim/kmail/kmcomposewin.cpp #1.900:1.901 @ -91,4 +91,5 @ using KRecentAddress::RecentAddresses; #include #include +#include #include #include @ -934,4 +935,11 @ void KMComposeWin::setupActions(void) this, SLOT(slotInsertFile()), actionCollection(), "insert_file"); + mRecentAction = new KRecentFilesAction (i18n("&Insert File Recent"), + "fileopen", 0, + this, SLOT(slotInsertRecentFile(const KURL&)), + actionCollection(), "insert_file_recent"); + + mRecentAction->loadEntries( KMKernel::config() ); + (void) new KAction (i18n("&Address Book"), "contents",0, this, SLOT(slotAddrBook()), @ -2366,5 +2374,37 @ void KMComposeWin::slotInsertFile() KURL u = fdlg.selectedURL(); + mRecentAction->addURL(u); + // Prevent race condition updating list when multiple composers are open + { + KConfig *config = KMKernel::config(); + KConfigGroupSaver saver( config, "Composer" ); + QString encoding = KGlobal::charsets()->encodingForName(combo->currentText()).latin1(); + QStringList urls = config->readListEntry( "recent-urls" ); + QStringList encodings = config->readListEntry( "recent-encodings" ); + // Prevent config file from growing without bound + // Would be nicer to get this constant from KRecentFilesAction + uint mMaxRecentFiles = 30; + while (urls.count() > mMaxRecentFiles) + urls.erase( urls.fromLast() ); + while (encodings.count() > mMaxRecentFiles) + urls.erase( encodings.fromLast() ); + // sanity check + if (urls.count() != encodings.count()) { + urls.clear(); + encodings.clear(); + } + urls.prepend( u.prettyURL() ); + encodings.prepend( encoding ); + config->writeEntry( "recent-urls", urls ); + config->writeEntry( "recent-encodings", encodings ); + mRecentAction->saveEntries( config ); + } + slotInsertRecentFile(u); +} + +//----------------------------------------------------------------------------- +void KMComposeWin::slotInsertRecentFile(const KURL& u) +{ if (u.fileName().isEmpty()) return; @ -2374,6 +2414,16 @ void KMComposeWin::slotInsertFile() ld.data = QByteArray(); ld.insert = true; - ld.encoding = KGlobal::charsets()->encodingForName( - combo->currentText()).latin1(); + // Get the encoding previously used when inserting this file + { + KConfig *config = KMKernel::config(); + KConfigGroupSaver saver( config, "Composer" ); + QStringList urls = config->readListEntry( "recent-urls" ); + QStringList encodings = config->readListEntry( "recent-encodings" ); + int index = urls.findIndex( u.prettyURL() ); + if (index != -1) { + QString encoding = encodings[ index ]; + ld.encoding = encoding.latin1(); + } + } mMapAtmLoadData.insert(job, ld); connect(job, SIGNAL(result(KIO::Job *)), _______________________________________________ KMail developers mailing list KMail-devel@kde.org https://mail.kde.org/mailman/listinfo/kmail-devel