7 #include "templatescommandmenu.h"
9 #include "templateparser_debug.h"
10 #include <KActionMenu>
11 #include <KLazyLocalizedString>
12 #include <KLocalizedString>
15 using namespace TemplateParser;
17 struct InsertCommand {
19 const TemplatesCommandMenu::Command command;
21 Q_REQUIRED_RESULT
QString getLocalizedDisplayName()
const
27 static const InsertCommand originalCommands[] = {{kli18n(
"Quoted Message Text"), TemplatesCommandMenu::CQuote},
29 {kli18n(
"Message Text as Is"), TemplatesCommandMenu::CText},
31 {kli18n(
"Message Id"), TemplatesCommandMenu::COMsgId},
33 {kli18n(
"Date"), TemplatesCommandMenu::CODate},
35 {kli18n(
"Date in Short Format"), TemplatesCommandMenu::CODateShort},
37 {kli18n(
"Date in C Locale"), TemplatesCommandMenu::CODateEn},
39 {kli18n(
"Day of Week"), TemplatesCommandMenu::CODow},
41 {kli18n(
"Time"), TemplatesCommandMenu::COTime},
43 {kli18n(
"Time in Long Format"), TemplatesCommandMenu::COTimeLong},
45 {kli18n(
"Time in C Locale"), TemplatesCommandMenu::COTimeLongEn},
47 {kli18n(
"To Field Address"), TemplatesCommandMenu::COToAddr},
49 {kli18n(
"To Field Name"), TemplatesCommandMenu::COToName},
51 {kli18n(
"To Field First Name"), TemplatesCommandMenu::COToFName},
53 {kli18n(
"To Field Last Name"), TemplatesCommandMenu::COToLName},
55 {kli18n(
"CC Field Address"), TemplatesCommandMenu::COCCAddr},
57 {kli18n(
"CC Field Name"), TemplatesCommandMenu::COCCName},
59 {kli18n(
"CC Field First Name"), TemplatesCommandMenu::COCCFName},
61 {kli18n(
"CC Field Last Name"), TemplatesCommandMenu::COCCLName},
63 {kli18n(
"From Field Address"), TemplatesCommandMenu::COFromAddr},
65 {kli18n(
"From Field Name"), TemplatesCommandMenu::COFromName},
67 {kli18n(
"From Field First Name"), TemplatesCommandMenu::COFromFName},
69 {kli18n(
"From Field Last Name"), TemplatesCommandMenu::COFromLName},
71 {kli18n(
"Addresses of all recipients"), TemplatesCommandMenu::COAddresseesAddr},
73 {kli18nc(
"Template value for subject of the message",
"Subject"), TemplatesCommandMenu::COFullSubject},
75 {kli18n(
"Quoted Headers"), TemplatesCommandMenu::CQHeaders},
77 {kli18n(
"Headers as Is"), TemplatesCommandMenu::CHeaders},
79 {kli18n(
"Header Content"), TemplatesCommandMenu::COHeader},
81 {kli18n(
"Reply as Quoted Plain Text"), TemplatesCommandMenu::CQuotePlain},
83 {kli18n(
"Reply as Quoted HTML Text"), TemplatesCommandMenu::CQuoteHtml}};
84 static const int originalCommandsCount =
sizeof(originalCommands) /
sizeof(*originalCommands);
86 static const InsertCommand currentCommands[] = {{kli18n(
"Date"), TemplatesCommandMenu::CDate},
88 {kli18n(
"Date in Short Format"), TemplatesCommandMenu::CDateShort},
90 {kli18n(
"Date in C Locale"), TemplatesCommandMenu::CDateEn},
92 {kli18n(
"Day of Week"), TemplatesCommandMenu::CDow},
94 {kli18n(
"Time"), TemplatesCommandMenu::CTime},
96 {kli18n(
"Time in Long Format"), TemplatesCommandMenu::CTimeLong},
98 {kli18n(
"Time in C Locale"), TemplatesCommandMenu::CTimeLongEn},
99 {kli18n(
"To Field Address"), TemplatesCommandMenu::CToAddr},
101 {kli18n(
"To Field Name"), TemplatesCommandMenu::CToName},
103 {kli18n(
"To Field First Name"), TemplatesCommandMenu::CToFName},
105 {kli18n(
"To Field Last Name"), TemplatesCommandMenu::CToLName},
107 {kli18n(
"CC Field Address"), TemplatesCommandMenu::CCCAddr},
109 {kli18n(
"CC Field Name"), TemplatesCommandMenu::CCCName},
111 {kli18n(
"CC Field First Name"), TemplatesCommandMenu::CCCFName},
113 {kli18n(
"CC Field Last Name"), TemplatesCommandMenu::CCCLName},
115 {kli18n(
"From Field Address"), TemplatesCommandMenu::CFromAddr},
117 {kli18n(
"From field Name"), TemplatesCommandMenu::CFromName},
119 {kli18n(
"From Field First Name"), TemplatesCommandMenu::CFromFName},
121 {kli18n(
"From Field Last Name"), TemplatesCommandMenu::CFromLName},
123 {kli18nc(
"Template subject command.",
"Subject"), TemplatesCommandMenu::CFullSubject},
125 {kli18n(
"Header Content"), TemplatesCommandMenu::CHeader}};
126 static const int currentCommandsCount =
sizeof(currentCommands) /
sizeof(*currentCommands);
128 static const InsertCommand extCommands[] = {{kli18n(
"Pipe Original Message Body and Insert Result as Quoted Text"), TemplatesCommandMenu::CQuotePipe},
130 {kli18n(
"Pipe Original Message Body and Insert Result as Is"), TemplatesCommandMenu::CTextPipe},
132 {kli18n(
"Pipe Original Message with Headers and Insert Result as Is"), TemplatesCommandMenu::CMsgPipe},
134 {kli18n(
"Pipe Current Message Body and Insert Result as Is"), TemplatesCommandMenu::CBodyPipe},
136 {kli18n(
"Pipe Current Message Body and Replace with Result"), TemplatesCommandMenu::CClearPipe}};
138 static const int extCommandsCount =
sizeof(extCommands) /
sizeof(*extCommands);
140 static const InsertCommand miscCommands[] = {
141 {kli18nc(
"Inserts user signature, also known as footer, into message",
"Signature"), TemplatesCommandMenu::CSignature},
143 {kli18n(
"Insert File Content"), TemplatesCommandMenu::CInsert},
145 {kli18nc(
"All characters, up to and including the next newline, "
146 "are discarded without performing any macro expansion",
147 "Discard to Next Line"),
148 TemplatesCommandMenu::CDnl},
150 {kli18n(
"Template Comment"), TemplatesCommandMenu::CRem},
152 {kli18n(
"No Operation"), TemplatesCommandMenu::CNop},
154 {kli18n(
"Clear Generated Message"), TemplatesCommandMenu::CClear},
155 {kli18n(
"Cursor position"), TemplatesCommandMenu::CCursor},
157 {kli18n(
"Blank text"), TemplatesCommandMenu::CBlank},
159 {kli18n(
"Dictionary Language"), TemplatesCommandMenu::CDictionaryLanguage},
160 {kli18n(
"Language"), TemplatesCommandMenu::CLanguage},
163 static const int miscCommandsCount =
sizeof(miscCommands) /
sizeof(*miscCommands);
165 static const InsertCommand debugCommands[] = {{kli18n(
"Turn Debug On"), TemplatesCommandMenu::CDebug},
167 {kli18n(
"Turn Debug Off"), TemplatesCommandMenu::CDebugOff}};
168 static const int debugCommandsCount =
sizeof(debugCommands) /
sizeof(*debugCommands);
176 auto action =
new QAction(it.key(), menu);
177 const TemplatesCommandMenu::Command cmd = it.value();
179 slotInsertCommand(cmd);
186 TemplatesCommandMenu::TemplatesCommandMenu(
QObject *parent)
191 TemplatesCommandMenu::~TemplatesCommandMenu() =
default;
193 QMenu *TemplatesCommandMenu::menu()
const
195 return mMenu->
menu();
198 void TemplatesCommandMenu::fillMenu()
203 void TemplatesCommandMenu::fillSubMenus()
205 if (mWasInitialized) {
208 mWasInitialized =
true;
212 if (mType & ReplyForwardMessage) {
217 for (
int i = 0; i < originalCommandsCount; ++i) {
218 commandMap.
insert(originalCommands[i].getLocalizedDisplayName(), originalCommands[i].command);
221 fillMenuFromActionMap(commandMap, menu);
226 if (mType & CurrentMessage) {
230 for (
int i = 0; i < currentCommandsCount; ++i) {
231 commandMap.
insert(currentCommands[i].getLocalizedDisplayName(), currentCommands[i].command);
234 fillMenuFromActionMap(commandMap, menu);
239 if (mType & External) {
243 for (
int i = 0; i < extCommandsCount; ++i) {
244 commandMap.
insert(extCommands[i].getLocalizedDisplayName(), extCommands[i].command);
247 fillMenuFromActionMap(commandMap, menu);
253 menu =
new KActionMenu(
i18nc(
"Miscellaneous template commands menu",
"Miscellaneous"), mMenu);
256 for (
int i = 0; i < miscCommandsCount; ++i) {
257 commandMap.
insert(miscCommands[i].getLocalizedDisplayName(), miscCommands[i].command);
260 fillMenuFromActionMap(commandMap, menu);
265 if (!qEnvironmentVariableIsEmpty(
"KDEPIM_DEBUGGING")) {
267 menu =
new KActionMenu(
i18nc(
"Debug template commands menu",
"Debug"), mMenu);
270 for (
int i = 0; i < debugCommandsCount; ++i) {
271 commandMap.
insert(debugCommands[i].getLocalizedDisplayName(), debugCommands[i].command);
274 fillMenuFromActionMap(commandMap, menu);
284 void TemplatesCommandMenu::setType(MenuTypes type)
288 mWasInitialized =
false;
293 void TemplatesCommandMenu::slotInsertCommand(TemplatesCommandMenu::Command cmd)
295 Q_EMIT insertCommand(cmd);
298 case TemplatesCommandMenu::CBlank:
299 Q_EMIT insertCommand(QStringLiteral(
"%BLANK"));
301 case TemplatesCommandMenu::CQuote:
302 Q_EMIT insertCommand(QStringLiteral(
"%QUOTE"));
304 case TemplatesCommandMenu::CText:
305 Q_EMIT insertCommand(QStringLiteral(
"%TEXT"));
307 case TemplatesCommandMenu::COMsgId:
308 Q_EMIT insertCommand(QStringLiteral(
"%OMSGID"));
310 case TemplatesCommandMenu::CODate:
311 Q_EMIT insertCommand(QStringLiteral(
"%ODATE"));
313 case TemplatesCommandMenu::CODateShort:
314 Q_EMIT insertCommand(QStringLiteral(
"%ODATESHORT"));
316 case TemplatesCommandMenu::CODateEn:
317 Q_EMIT insertCommand(QStringLiteral(
"%ODATEEN"));
319 case TemplatesCommandMenu::CODow:
320 Q_EMIT insertCommand(QStringLiteral(
"%ODOW"));
322 case TemplatesCommandMenu::COTime:
323 Q_EMIT insertCommand(QStringLiteral(
"%OTIME"));
325 case TemplatesCommandMenu::COTimeLong:
326 Q_EMIT insertCommand(QStringLiteral(
"%OTIMELONG"));
328 case TemplatesCommandMenu::COTimeLongEn:
329 Q_EMIT insertCommand(QStringLiteral(
"%OTIMELONGEN"));
331 case TemplatesCommandMenu::COToAddr:
332 Q_EMIT insertCommand(QStringLiteral(
"%OTOADDR"));
334 case TemplatesCommandMenu::COToName:
335 Q_EMIT insertCommand(QStringLiteral(
"%OTONAME"));
337 case TemplatesCommandMenu::COToFName:
338 Q_EMIT insertCommand(QStringLiteral(
"%OTOFNAME"));
340 case TemplatesCommandMenu::COToLName:
341 Q_EMIT insertCommand(QStringLiteral(
"%OTOLNAME"));
343 case TemplatesCommandMenu::COCCAddr:
344 Q_EMIT insertCommand(QStringLiteral(
"%OCCADDR"));
346 case TemplatesCommandMenu::COCCName:
347 Q_EMIT insertCommand(QStringLiteral(
"%OCCNAME"));
349 case TemplatesCommandMenu::COCCFName:
350 Q_EMIT insertCommand(QStringLiteral(
"%OCCFNAME"));
352 case TemplatesCommandMenu::COCCLName:
353 Q_EMIT insertCommand(QStringLiteral(
"%OCCLNAME"));
355 case TemplatesCommandMenu::COFromAddr:
356 Q_EMIT insertCommand(QStringLiteral(
"%OFROMADDR"));
358 case TemplatesCommandMenu::COFromName:
359 Q_EMIT insertCommand(QStringLiteral(
"%OFROMNAME"));
361 case TemplatesCommandMenu::COFromFName:
362 Q_EMIT insertCommand(QStringLiteral(
"%OFROMFNAME"));
364 case TemplatesCommandMenu::COFromLName:
365 Q_EMIT insertCommand(QStringLiteral(
"%OFROMLNAME"));
367 case TemplatesCommandMenu::COFullSubject:
368 Q_EMIT insertCommand(QStringLiteral(
"%OFULLSUBJECT"));
370 case TemplatesCommandMenu::CQHeaders:
371 Q_EMIT insertCommand(QStringLiteral(
"%QHEADERS"));
373 case TemplatesCommandMenu::CHeaders:
374 Q_EMIT insertCommand(QStringLiteral(
"%HEADERS"));
376 case TemplatesCommandMenu::COHeader:
377 Q_EMIT insertCommand(QStringLiteral(
"%OHEADER=\"\""), -1);
379 case TemplatesCommandMenu::CMsgId:
380 Q_EMIT insertCommand(QStringLiteral(
"%MSGID"));
382 case TemplatesCommandMenu::CDate:
383 Q_EMIT insertCommand(QStringLiteral(
"%DATE"));
385 case TemplatesCommandMenu::CDateShort:
386 Q_EMIT insertCommand(QStringLiteral(
"%DATESHORT"));
388 case TemplatesCommandMenu::CDateEn:
389 Q_EMIT insertCommand(QStringLiteral(
"%DATEEN"));
391 case TemplatesCommandMenu::CDow:
392 Q_EMIT insertCommand(QStringLiteral(
"%DOW"));
394 case TemplatesCommandMenu::CTime:
395 Q_EMIT insertCommand(QStringLiteral(
"%TIME"));
397 case TemplatesCommandMenu::CTimeLong:
398 Q_EMIT insertCommand(QStringLiteral(
"%TIMELONG"));
400 case TemplatesCommandMenu::CTimeLongEn:
401 Q_EMIT insertCommand(QStringLiteral(
"%TIMELONGEN"));
403 case TemplatesCommandMenu::COAddresseesAddr:
404 Q_EMIT insertCommand(QStringLiteral(
"%OADDRESSEESADDR"));
406 case TemplatesCommandMenu::CToAddr:
407 Q_EMIT insertCommand(QStringLiteral(
"%TOADDR"));
409 case TemplatesCommandMenu::CToName:
410 Q_EMIT insertCommand(QStringLiteral(
"%TONAME"));
412 case TemplatesCommandMenu::CToFName:
413 Q_EMIT insertCommand(QStringLiteral(
"%TOFNAME"));
415 case TemplatesCommandMenu::CToLName:
416 Q_EMIT insertCommand(QStringLiteral(
"%TOLNAME"));
418 case TemplatesCommandMenu::CCCAddr:
419 Q_EMIT insertCommand(QStringLiteral(
"%CCADDR"));
421 case TemplatesCommandMenu::CCCName:
422 Q_EMIT insertCommand(QStringLiteral(
"%CCNAME"));
424 case TemplatesCommandMenu::CCCFName:
425 Q_EMIT insertCommand(QStringLiteral(
"%CCFNAME"));
427 case TemplatesCommandMenu::CCCLName:
428 Q_EMIT insertCommand(QStringLiteral(
"%CCLNAME"));
430 case TemplatesCommandMenu::CFromAddr:
431 Q_EMIT insertCommand(QStringLiteral(
"%FROMADDR"));
433 case TemplatesCommandMenu::CFromName:
434 Q_EMIT insertCommand(QStringLiteral(
"%FROMNAME"));
436 case TemplatesCommandMenu::CFromFName:
437 Q_EMIT insertCommand(QStringLiteral(
"%FROMFNAME"));
439 case TemplatesCommandMenu::CFromLName:
440 Q_EMIT insertCommand(QStringLiteral(
"%FROMLNAME"));
442 case TemplatesCommandMenu::CFullSubject:
443 Q_EMIT insertCommand(QStringLiteral(
"%FULLSUBJECT"));
445 case TemplatesCommandMenu::CHeader:
446 Q_EMIT insertCommand(QStringLiteral(
"%HEADER=\"\""), -1);
448 case TemplatesCommandMenu::CSystem:
449 Q_EMIT insertCommand(QStringLiteral(
"%SYSTEM=\"\""), -1);
451 case TemplatesCommandMenu::CQuotePipe:
452 Q_EMIT insertCommand(QStringLiteral(
"%QUOTEPIPE=\"\""), -1);
454 case TemplatesCommandMenu::CTextPipe:
455 Q_EMIT insertCommand(QStringLiteral(
"%TEXTPIPE=\"\""), -1);
457 case TemplatesCommandMenu::CMsgPipe:
458 Q_EMIT insertCommand(QStringLiteral(
"%MSGPIPE=\"\""), -1);
460 case TemplatesCommandMenu::CBodyPipe:
461 Q_EMIT insertCommand(QStringLiteral(
"%BODYPIPE=\"\""), -1);
463 case TemplatesCommandMenu::CClearPipe:
464 Q_EMIT insertCommand(QStringLiteral(
"%CLEARPIPE=\"\""), -1);
466 case TemplatesCommandMenu::CCursor:
467 Q_EMIT insertCommand(QStringLiteral(
"%CURSOR"));
469 case TemplatesCommandMenu::CSignature:
470 Q_EMIT insertCommand(QStringLiteral(
"%SIGNATURE"));
472 case TemplatesCommandMenu::CInsert:
473 Q_EMIT insertCommand(QStringLiteral(
"%INSERT=\"\""), -1);
475 case TemplatesCommandMenu::CDnl:
476 Q_EMIT insertCommand(QStringLiteral(
"%-"));
478 case TemplatesCommandMenu::CRem:
479 Q_EMIT insertCommand(QStringLiteral(
"%REM=\"\""), -1);
481 case TemplatesCommandMenu::CNop:
482 Q_EMIT insertCommand(QStringLiteral(
"%NOP"));
484 case TemplatesCommandMenu::CClear:
485 Q_EMIT insertCommand(QStringLiteral(
"%CLEAR"));
487 case TemplatesCommandMenu::CDebug:
488 Q_EMIT insertCommand(QStringLiteral(
"%DEBUG"));
490 case TemplatesCommandMenu::CDebugOff:
491 Q_EMIT insertCommand(QStringLiteral(
"%DEBUGOFF"));
493 case TemplatesCommandMenu::CQuotePlain:
494 Q_EMIT insertCommand(QStringLiteral(
"%FORCEDPLAIN"));
496 case TemplatesCommandMenu::CQuoteHtml:
497 Q_EMIT insertCommand(QStringLiteral(
"%FORCEDHTML"));
499 case TemplatesCommandMenu::CDictionaryLanguage:
500 Q_EMIT insertCommand(QStringLiteral(
"%DICTIONARYLANGUAGE=\"\""), -1);
502 case TemplatesCommandMenu::CLanguage:
503 Q_EMIT insertCommand(QStringLiteral(
"%LANGUAGE=\"\""), -1);
506 qCDebug(TEMPLATEPARSER_LOG) <<
"Unknown template command index:" << cmd;