summaryrefslogtreecommitdiff
path: root/plugins/NewStory/src/history_array.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/NewStory/src/history_array.cpp')
-rw-r--r--plugins/NewStory/src/history_array.cpp196
1 files changed, 107 insertions, 89 deletions
diff --git a/plugins/NewStory/src/history_array.cpp b/plugins/NewStory/src/history_array.cpp
index 5463421c37..41b091b37c 100644
--- a/plugins/NewStory/src/history_array.cpp
+++ b/plugins/NewStory/src/history_array.cpp
@@ -46,18 +46,34 @@ bool Filter::check(ItemData *item)
/////////////////////////////////////////////////////////////////////////////////////////
// Event
+ItemData::~ItemData()
+{
+ mir_free(wtext);
+ if (data)
+ MTextDestroy(data);
+}
+
void ItemData::checkCreate(HWND hwnd)
{
if (data == nullptr) {
- if (m_bRtf)
- data = MTextCreateEx(htuLog, this->wtext, MTEXT_FLG_WCHAR | MTEXT_FLG_RTF);
- else
- data = MTextCreateW(htuLog, Proto_GetBaseAccountName(hContact), ptrW(TplFormatString(getTemplate(), hContact, this)));
+ setText();
MTextSetParent(data, hwnd);
MTextActivate(data, true);
}
}
+bool ItemData::isGrouped() const
+{
+ if (pPrev && g_plugin.bMsgGrouping) {
+ if (!pPrev->m_bLoaded)
+ pPrev->load(true);
+
+ if (pPrev->hContact == hContact && (pPrev->dbe.flags & DBEF_SENT) == (dbe.flags & DBEF_SENT))
+ return true;
+ }
+ return false;
+}
+
bool ItemData::isLink(POINT pt, CMStringW &url) const
{
int cp = MTextSendMessage(0, data, EM_CHARFROMPOS, 0, LPARAM(&pt));
@@ -102,9 +118,77 @@ bool ItemData::isLinkChar(int idx) const
return ((res & CFM_LINK) && (cf.dwEffects & CFE_LINK)) || ((res & CFM_REVISED) && (cf.dwEffects & CFE_REVISED));
}
+int ItemData::getTemplate() const
+{
+ switch (dbe.eventType) {
+ case EVENTTYPE_MESSAGE: return isGrouped() ? TPL_MSG_GRP : TPL_MESSAGE;
+ case EVENTTYPE_FILE: return TPL_FILE;
+ case EVENTTYPE_STATUSCHANGE: return TPL_SIGN;
+ case EVENTTYPE_AUTHREQUEST: return TPL_AUTH;
+ case EVENTTYPE_ADDED: return TPL_ADDED;
+ case EVENTTYPE_JABBER_PRESENCE: return TPL_PRESENCE;
+ default:
+ return TPL_OTHER;
+ }
+}
+
+int ItemData::getCopyTemplate() const
+{
+ switch (dbe.eventType) {
+ case EVENTTYPE_MESSAGE: return TPL_COPY_MESSAGE;
+ case EVENTTYPE_FILE: return TPL_COPY_FILE;
+ case EVENTTYPE_STATUSCHANGE: return TPL_COPY_SIGN;
+ case EVENTTYPE_AUTHREQUEST: return TPL_COPY_AUTH;
+ case EVENTTYPE_ADDED: return TPL_COPY_ADDED;
+ case EVENTTYPE_JABBER_PRESENCE: return TPL_COPY_PRESENCE;
+ default:
+ return TPL_COPY_OTHER;
+ }
+}
+
+void ItemData::getFontColor(int &fontId, int &colorId) const
+{
+ switch (dbe.eventType) {
+ case EVENTTYPE_MESSAGE:
+ fontId = !(dbe.flags & DBEF_SENT) ? FONT_INMSG : FONT_OUTMSG;
+ colorId = !(dbe.flags & DBEF_SENT) ? COLOR_INMSG : COLOR_OUTMSG;
+ break;
+
+ case EVENTTYPE_FILE:
+ fontId = !(dbe.flags & DBEF_SENT) ? FONT_INFILE : FONT_OUTFILE;
+ colorId = !(dbe.flags & DBEF_SENT) ? COLOR_INFILE : COLOR_OUTFILE;
+ break;
+
+ case EVENTTYPE_STATUSCHANGE:
+ fontId = FONT_STATUS;
+ colorId = COLOR_STATUS;
+ break;
+
+ case EVENTTYPE_AUTHREQUEST:
+ fontId = FONT_INOTHER;
+ colorId = COLOR_INOTHER;
+ break;
+
+ case EVENTTYPE_ADDED:
+ fontId = FONT_INOTHER;
+ colorId = COLOR_INOTHER;
+ break;
+
+ case EVENTTYPE_JABBER_PRESENCE:
+ fontId = !(dbe.flags & DBEF_SENT) ? FONT_INOTHER : FONT_OUTOTHER;
+ colorId = !(dbe.flags & DBEF_SENT) ? COLOR_INOTHER : COLOR_OUTOTHER;
+ break;
+
+ default:
+ fontId = !(dbe.flags & DBEF_SENT) ? FONT_INOTHER : FONT_OUTOTHER;
+ colorId = !(dbe.flags & DBEF_SENT) ? COLOR_INOTHER : COLOR_OUTOTHER;
+ break;
+ }
+}
+
void ItemData::load(bool bFullLoad)
{
- if (!bFullLoad || m_bLoaded)
+ if (!bFullLoad && m_bLoaded)
return;
dbe.cbBlob = -1;
@@ -180,91 +264,12 @@ void ItemData::load(bool bFullLoad)
dbe.pBlob = nullptr;
}
-bool ItemData::isGrouped() const
+void ItemData::setText()
{
- if (pPrev && g_plugin.bMsgGrouping) {
- if (!pPrev->m_bLoaded)
- pPrev->load(true);
-
- if (pPrev->hContact == hContact && (pPrev->dbe.flags & DBEF_SENT) == (dbe.flags & DBEF_SENT))
- return true;
- }
- return false;
-}
-
-ItemData::~ItemData()
-{
- mir_free(wtext);
- if (data)
- MTextDestroy(data);
-}
-
-int ItemData::getTemplate() const
-{
- switch (dbe.eventType) {
- case EVENTTYPE_MESSAGE: return isGrouped() ? TPL_MSG_GRP : TPL_MESSAGE;
- case EVENTTYPE_FILE: return TPL_FILE;
- case EVENTTYPE_STATUSCHANGE: return TPL_SIGN;
- case EVENTTYPE_AUTHREQUEST: return TPL_AUTH;
- case EVENTTYPE_ADDED: return TPL_ADDED;
- case EVENTTYPE_JABBER_PRESENCE: return TPL_PRESENCE;
- default:
- return TPL_OTHER;
- }
-}
-
-int ItemData::getCopyTemplate() const
-{
- switch (dbe.eventType) {
- case EVENTTYPE_MESSAGE: return TPL_COPY_MESSAGE;
- case EVENTTYPE_FILE: return TPL_COPY_FILE;
- case EVENTTYPE_STATUSCHANGE: return TPL_COPY_SIGN;
- case EVENTTYPE_AUTHREQUEST: return TPL_COPY_AUTH;
- case EVENTTYPE_ADDED: return TPL_COPY_ADDED;
- case EVENTTYPE_JABBER_PRESENCE: return TPL_COPY_PRESENCE;
- default:
- return TPL_COPY_OTHER;
- }
-}
-
-void ItemData::getFontColor(int &fontId, int &colorId) const
-{
- switch (dbe.eventType) {
- case EVENTTYPE_MESSAGE:
- fontId = !(dbe.flags & DBEF_SENT) ? FONT_INMSG : FONT_OUTMSG;
- colorId = !(dbe.flags & DBEF_SENT) ? COLOR_INMSG : COLOR_OUTMSG;
- break;
-
- case EVENTTYPE_FILE:
- fontId = !(dbe.flags & DBEF_SENT) ? FONT_INFILE : FONT_OUTFILE;
- colorId = !(dbe.flags & DBEF_SENT) ? COLOR_INFILE : COLOR_OUTFILE;
- break;
-
- case EVENTTYPE_STATUSCHANGE:
- fontId = FONT_STATUS;
- colorId = COLOR_STATUS;
- break;
-
- case EVENTTYPE_AUTHREQUEST:
- fontId = FONT_INOTHER;
- colorId = COLOR_INOTHER;
- break;
-
- case EVENTTYPE_ADDED:
- fontId = FONT_INOTHER;
- colorId = COLOR_INOTHER;
- break;
-
- case EVENTTYPE_JABBER_PRESENCE:
- fontId = !(dbe.flags & DBEF_SENT) ? FONT_INOTHER : FONT_OUTOTHER;
- colorId = !(dbe.flags & DBEF_SENT) ? COLOR_INOTHER : COLOR_OUTOTHER;
- break;
-
- default:
- fontId = !(dbe.flags & DBEF_SENT) ? FONT_INOTHER : FONT_OUTOTHER;
- colorId = !(dbe.flags & DBEF_SENT) ? COLOR_INOTHER : COLOR_OUTOTHER;
- break;
- }
+ if (m_bRtf)
+ data = MTextCreateEx(htuLog, this->wtext, MTEXT_FLG_WCHAR | MTEXT_FLG_RTF);
+ else
+ data = MTextCreateW(htuLog, Proto_GetBaseAccountName(hContact), ptrW(TplFormatString(getTemplate(), hContact, this)));
}
// Array
@@ -354,6 +359,19 @@ ItemData& HistoryArray::allocateItem()
return p.data[iLastPageCounter++];
}
+int HistoryArray::find(MEVENT hEvent)
+{
+ int i = 0;
+ for (auto &it : pages)
+ for (auto &p : it->data) {
+ if (p.hEvent == hEvent)
+ return i;
+ i++;
+ }
+
+ return -1;
+}
+
ItemData* HistoryArray::get(int id, bool bLoad)
{
int pageNo = id / HIST_BLOCK_SIZE;