summaryrefslogtreecommitdiff
path: root/plugins/YAPP/src/yapp_history.cpp
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];
}