This patch adds an option for merging chat messages, when they comes from same contact as previous message. Patch is modified version of kg's patch available at: http://kg.alternatywa.info/psi/patche/psi-kg-says_mod.diff Przemysław 'Troll' Maciąg diff --exclude='*orig' -Naur psi-0.10-test1-orig/src/chatdlg.cpp psi-0.10-test1/src/chatdlg.cpp --- psi-0.10-test1-orig/src/chatdlg.cpp 2005-09-03 14:29:14.000000000 +0000 +++ psi-0.10-test1/src/chatdlg.cpp 2005-09-03 14:52:44.000000000 +0000 @@ -108,6 +108,8 @@ bool sendComposingEvents; QString eventId; + lastSaysEnum lastSays; + signals: // Signals if user (re)started/stopped composing void composing(bool); @@ -360,6 +362,8 @@ UserListItem *u = d->pa->findFirstRelavent(d->jid); if(u && u->isSecure(d->jid.resource())) d->act_pgp->setOn(true); + + d->lastSays = lastUnknown; } ChatDlg::~ChatDlg() @@ -1079,7 +1083,18 @@ } else { if(option.chatSays) - appendParagraph (QString("").arg(color) + QString("[%1] ").arg(timestr) + tr("%1 says:").arg(who) + "
" + txt, bgcolor); + { + QString chatmsgtxt; + if (!option.chatSaysMerge || d->lastSays != lastSaysEnum(local)) + { + chatmsgtxt = QString("").arg(color) + QString("[%1] ").arg(timestr) + tr("%1 says:").arg(who) + "
" + txt; + d->lastSays = lastSaysEnum(local); + } + else + chatmsgtxt = txt; + + appendParagraph (chatmsgtxt, bgcolor); + } else appendParagraph (QString("").arg(color) + QString("[%1] <").arg(timestr) + who + QString("> ") + txt, bgcolor); } diff --exclude='*orig' -Naur psi-0.10-test1-orig/src/chatdlg.h psi-0.10-test1/src/chatdlg.h --- psi-0.10-test1-orig/src/chatdlg.h 2005-09-03 14:29:53.000000000 +0000 +++ psi-0.10-test1/src/chatdlg.h 2005-09-03 14:53:15.000000000 +0000 @@ -26,6 +26,8 @@ using namespace XMPP; +enum lastSaysEnum {lastLocal = 0, lastRemote, lastUnknown}; + class PsiAccount; class UserListItem; class QDropEvent; diff --exclude='*orig' -Naur psi-0.10-test1-orig/src/common.h psi-0.10-test1/src/common.h --- psi-0.10-test1-orig/src/common.h 2005-09-03 14:30:56.000000000 +0000 +++ psi-0.10-test1/src/common.h 2005-09-03 14:53:55.000000000 +0000 @@ -138,7 +138,7 @@ bool ignoreHeadline, ignoreNonRoster, excludeGroupChatsFromIgnore, scrollTo, keepSizes, useEmoticons, alertOpenChats, useStatusLinebreak, spaceEmoticons, useLaTeX; bool emoticonsInChatDlg, emoticonsInEventDlg, emoticonsInGroupChatDlg, emoticonsInPopup, emoticonsInToolTip, emoticonsInRoster; - bool raiseChatWindow, showSubjects, showCounter, chatSays, chatSoftReturn, showGroupCounts; + bool raiseChatWindow, showSubjects, showCounter, chatSays, chatSaysMerge, chatSoftReturn, showGroupCounts; QSize sizeEventDlg, sizeChatDlg, sizeTabDlg; bool jidComplete, grabUrls, noGCSound; diff --exclude='*orig' -Naur psi-0.10-test1-orig/src/options/opt_chat.cpp psi-0.10-test1/src/options/opt_chat.cpp --- psi-0.10-test1-orig/src/options/opt_chat.cpp 2005-08-22 19:52:28.000000000 +0000 +++ psi-0.10-test1/src/options/opt_chat.cpp 2005-09-03 14:55:40.000000000 +0000 @@ -62,6 +62,10 @@ "

Hi

" "

[01:23:56] YourName says:

" "

How are you?

")); + QWhatsThis::add(d->ck_chatSaysMerge, + tr("Option will merge contact messages if they are send" + "one after another, so you will see it as single message" + "instead of two, or more, separate")); QWhatsThis::add(d->ck_chatSoftReturn, tr("

When checked, pressing Enter in a chat window will send your message." " You must use Shift+Enter in order to create a newline in the chat message." @@ -88,6 +92,8 @@ QWhatsThis::add(d->rb_delChatsNever, s + tr("

This options keeps the chat log forever.

")); + connect(d->ck_chatSays, SIGNAL(clicked()), SLOT(changeChatState())); + return w; } @@ -100,6 +106,7 @@ opt->defaultAction = bg_defAct->id(bg_defAct->selected()); opt->chatSays = d->ck_chatSays->isChecked(); + opt->chatSaysMerge = d->ck_chatSaysMerge->isChecked(); opt->chatSoftReturn = d->ck_chatSoftReturn->isChecked(); opt->alertOpenChats = d->ck_alertOpenChats->isChecked(); opt->raiseChatWindow = d->ck_raiseChatWindow->isChecked(); @@ -119,6 +126,8 @@ bg_defAct->setButton( opt->defaultAction ); d->ck_chatSays->setChecked( opt->chatSays ); + d->ck_chatSaysMerge->setEnabled( opt->chatSays ); + d->ck_chatSaysMerge->setChecked( opt->chatSaysMerge ); d->ck_chatSoftReturn->setChecked( opt->chatSoftReturn ); d->ck_alertOpenChats->setChecked( opt->alertOpenChats ); d->ck_raiseChatWindow->setChecked( opt->raiseChatWindow ); @@ -127,3 +136,10 @@ d->ck_autoResize->setChecked( opt->chatLineEdit ); bg_delChats->setButton( opt->delChats ); } + +void OptionsTabChat::changeChatState () +{ + OptChatUI *d = (OptChatUI *)w; + + d->ck_chatSaysMerge->setEnabled( d->ck_chatSays->isChecked() ); +} diff --exclude='*orig' -Naur psi-0.10-test1-orig/src/options/opt_chat.h psi-0.10-test1/src/options/opt_chat.h --- psi-0.10-test1-orig/src/options/opt_chat.h 2005-08-21 17:44:28.000000000 +0000 +++ psi-0.10-test1/src/options/opt_chat.h 2005-09-03 14:55:59.000000000 +0000 @@ -21,6 +21,9 @@ private: QWidget *w; QButtonGroup *bg_defAct, *bg_delChats; + +private slots: + void changeChatState (); }; #endif diff --exclude='*orig' -Naur psi-0.10-test1-orig/src/options/opt_chat-ui.ui psi-0.10-test1/src/options/opt_chat-ui.ui --- psi-0.10-test1-orig/src/options/opt_chat-ui.ui 2005-08-22 19:52:28.000000000 +0000 +++ psi-0.10-test1/src/options/opt_chat-ui.ui 2005-09-03 14:56:55.000000000 +0000 @@ -32,6 +32,14 @@ + ck_chatSaysMerge + + + Merge contact messages if send one after another + + + + ck_chatSoftReturn diff --exclude='*orig' -Naur psi-0.10-test1-orig/src/psi_profiles.cpp psi-0.10-test1/src/psi_profiles.cpp --- psi-0.10-test1-orig/src/psi_profiles.cpp 2005-09-03 14:36:25.000000000 +0000 +++ psi-0.10-test1/src/psi_profiles.cpp 2005-09-03 14:58:16.000000000 +0000 @@ -396,6 +396,7 @@ prefs.showSubjects = true; prefs.showCounter = false; prefs.chatSays = false; + prefs.chatSaysMerge = false; prefs.chatSoftReturn = true; prefs.showGroupCounts = true; prefs.smallChats = false; @@ -855,6 +856,7 @@ p_misc.appendChild(textTag(doc, "showSubjects", prefs.showSubjects)); p_misc.appendChild(textTag(doc, "showCounter", prefs.showCounter)); p_misc.appendChild(textTag(doc, "chatSays", prefs.chatSays)); + p_misc.appendChild(textTag(doc, "chatSaysMerge", prefs.chatSaysMerge)); p_misc.appendChild(textTag(doc, "chatSoftReturn", prefs.chatSoftReturn)); p_misc.appendChild(textTag(doc, "showGroupCounts", prefs.showGroupCounts)); p_misc.appendChild(textTag(doc, "jidComplete", prefs.jidComplete)); @@ -1635,6 +1637,7 @@ readBoolEntry(tag, "showGroupCounts", &prefs.showGroupCounts); readBoolEntry(tag, "showCounter", &prefs.showCounter); readBoolEntry(tag, "chatSays", &prefs.chatSays); + readBoolEntry(tag, "chatSaysMerge", &prefs.chatSaysMerge); readBoolEntry(tag, "jidComplete", &prefs.jidComplete); readBoolEntry(tag, "grabUrls", &prefs.grabUrls); readBoolEntry(tag, "smallChats", &prefs.smallChats);