123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #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);
- }
- }
|