blob: 9240adbb2d01a88a66014b8899e9e3ab83f01df3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#include "stdafx.h"
PopupHistoryList::PopupHistoryList(int renderer)
{
this->renderer = renderer;
size = HISTORY_SIZE; //fixed size (at least for now)
historyData = (PopupHistoryData *) malloc(size * sizeof(PopupHistoryData)); //alloc space for data
count = 0;
}
PopupHistoryList::~PopupHistoryList()
{
Clear(); //clear the data strings
free(historyData); //deallocate the data list
}
void PopupHistoryList::Clear()
{
for (int i = 0; i < count; i++)
{
DeleteData(i);
}
count = 0;
}
void PopupHistoryList::RemoveItem(int index)
{
DeleteData(index); //free the mem for that particular item
for (int i = index + 1; i < count; i++)
{
historyData[i - 1] = historyData[i]; //shift all items to the left
}
}
void PopupHistoryList::DeleteData(int index)
{
PopupHistoryData *item = &historyData[index];
mir_free(item->titleT);
mir_free(item->messageT);
item->timestamp = 0; //invalidate item
item->title = nullptr;
item->message = nullptr;
item->flags = 0;
}
void PopupHistoryList::AddItem(PopupHistoryData item)
{
if (count >= size)
{
RemoveItem(0); //remove first element - the oldest
count--; //it will be inc'ed later
}
historyData[count++] = item; //item has it's relevant strings dupped()
RefreshPopupHistory(hHistoryWindow, GetRenderer());
}
void PopupHistoryList::Add(char *title, char *message, time_t timestamp)
{
PopupHistoryData item = {0}; //create a history item
item.timestamp = timestamp;
item.title = mir_strdup(title);
item.message = mir_strdup(message);
AddItem(item); //add it (flags = 0)
}
void PopupHistoryList::Add(wchar_t *title, wchar_t *message, time_t timestamp)
{
PopupHistoryData item = {0}; //create an unicode history item
item.flags = PHDF_UNICODE; //mark it as unicode
item.timestamp = timestamp;
item.titleT = mir_wstrdup(title);
item.messageT = mir_wstrdup(message);
AddItem(item); //add it
}
PopupHistoryData *PopupHistoryList::Get(int index)
{
if ((index < 0) || (index >= count)) //a bit of sanity check
{
return nullptr;
}
return &historyData[index];
}
|