79 lines
1.5 KiB
C++
79 lines
1.5 KiB
C++
|
|
#include "funclist.h"
|
|
#include "stdafx.h"
|
|
|
|
IMPLEMENT_DYNAMIC(FuncList, CListCtrl)
|
|
BEGIN_MESSAGE_MAP(FuncList, CListCtrl)
|
|
ON_WM_CREATE()
|
|
ON_NOTIFY_REFLECT(NM_CLICK, nm_click)
|
|
END_MESSAGE_MAP()
|
|
|
|
FuncList::FuncList() : listener(0) {}
|
|
|
|
void FuncList::setListener(FuncListListener* l)
|
|
{
|
|
listener = l;
|
|
}
|
|
|
|
int FuncList::OnCreate(LPCREATESTRUCT cs)
|
|
{
|
|
CListCtrl::OnCreate(cs);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void FuncList::nm_click(NMHDR* nmhdr, LRESULT* result)
|
|
{
|
|
NMLISTVIEW* lv = (NMLISTVIEW*)nmhdr;
|
|
|
|
int k = 0;
|
|
Funcs::iterator it;
|
|
for (it = funcs.begin(); it != funcs.end() && k < lv->iItem; ++k, ++it) {
|
|
}
|
|
if (it != funcs.end()) {
|
|
listener->funcSelected(*it);
|
|
}
|
|
*result = 0;
|
|
}
|
|
|
|
void FuncList::clear()
|
|
{
|
|
funcs.clear();
|
|
DeleteAllItems();
|
|
}
|
|
|
|
void FuncList::insert(int line, const string& func)
|
|
{
|
|
int n = 0;
|
|
Funcs::iterator it;
|
|
for (it = funcs.begin(); it != funcs.end() && line > *it; ++n, ++it) {
|
|
}
|
|
if (it != funcs.end() && line == *it) {
|
|
SetItemText(n, 0, func.c_str());
|
|
return;
|
|
}
|
|
it = funcs.insert(it, line);
|
|
InsertItem(n, func.c_str());
|
|
}
|
|
|
|
void FuncList::remove(int begin, int end)
|
|
{
|
|
int n = 0;
|
|
Funcs::iterator it;
|
|
for (it = funcs.begin(); it != funcs.end() && *it < begin; ++n, ++it) {
|
|
}
|
|
while (it != funcs.end() && *it < end) {
|
|
funcs.erase(it++);
|
|
DeleteItem(n);
|
|
}
|
|
}
|
|
|
|
void FuncList::relocate(int begin, int offset)
|
|
{
|
|
Funcs::iterator it;
|
|
for (it = funcs.begin(); it != funcs.end(); ++it) {
|
|
if (*it >= begin)
|
|
*it += offset;
|
|
}
|
|
}
|