Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
135
Src/Plugins/Library/ml_devices/listWidgetGroup.cpp
Normal file
135
Src/Plugins/Library/ml_devices/listWidgetGroup.cpp
Normal file
|
@ -0,0 +1,135 @@
|
|||
#include "main.h"
|
||||
#include "./listWidgetInternal.h"
|
||||
#include <algorithm>
|
||||
|
||||
ListWidgetGroup *
|
||||
ListWidget_CreateGroup(const char *name)
|
||||
{
|
||||
ifc_devicetype *deviceType;
|
||||
wchar_t buffer[1024] = {0};
|
||||
|
||||
if (NULL == name)
|
||||
return NULL;
|
||||
|
||||
if (NULL != WASABI_API_DEVICES &&
|
||||
S_OK == WASABI_API_DEVICES->TypeFind(name, &deviceType))
|
||||
{
|
||||
if (FAILED(deviceType->GetDisplayName(buffer, ARRAYSIZE(buffer))))
|
||||
buffer[0] = L'\0';
|
||||
|
||||
deviceType->Release();
|
||||
}
|
||||
else
|
||||
buffer[0] = L'\0';
|
||||
|
||||
return ListWidget_CreateGroupEx(name, buffer);
|
||||
}
|
||||
|
||||
ListWidgetGroup *
|
||||
ListWidget_CreateGroupEx(const char *name, const wchar_t *title)
|
||||
{
|
||||
ListWidgetGroup *group;
|
||||
|
||||
if (NULL == name)
|
||||
return NULL;
|
||||
|
||||
group = new ListWidgetGroup();
|
||||
if (NULL == group)
|
||||
return NULL;
|
||||
|
||||
group->name = AnsiString_Duplicate(name);
|
||||
group->title = String_Duplicate(title);
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ListWidget_DestroyGroup(ListWidgetGroup *group)
|
||||
{
|
||||
size_t index;
|
||||
if (NULL == group)
|
||||
return;
|
||||
|
||||
index = group->items.size();
|
||||
while(index--)
|
||||
{
|
||||
ListWidget_DestroyItem(group->items[index]);
|
||||
}
|
||||
|
||||
AnsiString_Free(group->name);
|
||||
String_Free(group->title);
|
||||
|
||||
delete group;
|
||||
}
|
||||
|
||||
BOOL
|
||||
ListWidget_AddGroup( ListWidgetCategory *category, ListWidgetGroup *group)
|
||||
{
|
||||
if (NULL == category || NULL == group)
|
||||
return FALSE;
|
||||
|
||||
category->groups.push_back(group);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
ListWidgetGroup *
|
||||
ListWidget_FindGroupEx(ListWidgetCategory *category, const char *name, size_t max)
|
||||
{
|
||||
size_t index, count;
|
||||
|
||||
if (NULL == category || NULL == name)
|
||||
return NULL;
|
||||
|
||||
count = category->groups.size();
|
||||
if (max < count)
|
||||
count = max;
|
||||
|
||||
for(index = 0; index < count; index++)
|
||||
{
|
||||
ListWidgetGroup *group = category->groups[index];
|
||||
if (CSTR_EQUAL == CompareStringA(CSTR_INVARIANT, 0, name, -1, group->name, -1))
|
||||
return group;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ListWidgetGroup *
|
||||
ListWidget_FindGroup(ListWidgetCategory *category, const char *name)
|
||||
{
|
||||
return ListWidget_FindGroupEx(category, name, -1);
|
||||
}
|
||||
|
||||
static int
|
||||
ListWidget_ItemSortCb(const void *element1, const void *element2)
|
||||
{
|
||||
ListWidgetItem *item1;
|
||||
ListWidgetItem *item2;
|
||||
int result;
|
||||
|
||||
item1 = (ListWidgetItem*)element1;
|
||||
item2 = (ListWidgetItem*)element2;
|
||||
|
||||
result = CompareString(LOCALE_USER_DEFAULT, 0, item1->title, -1, item2->title, -1);
|
||||
if (CSTR_EQUAL == result || 0 == result)
|
||||
result = CompareStringA(CSTR_INVARIANT, 0, item1->name, -1, item2->name, -1);
|
||||
|
||||
return (result - 2);
|
||||
|
||||
}
|
||||
static bool
|
||||
ListWidget_ItemSortCb_V2(const void* element1, const void* element2)
|
||||
{
|
||||
return ListWidget_ItemSortCb(element1, element2) < 0;
|
||||
}
|
||||
|
||||
void
|
||||
ListWidget_SortGroup(ListWidgetGroup *group)
|
||||
{
|
||||
if (group->items.size())
|
||||
{
|
||||
//qsort(group->items.first(), group->items.size(), sizeof(ListWidgetItem**), ListWidget_ItemSortCb);
|
||||
std::sort(group->items.begin(), group->items.end(), ListWidget_ItemSortCb_V2);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue