New! ListView DMs list!
This commit is contained in:
@@ -72,11 +72,23 @@ int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, PSTR pCmdLine,
|
|||||||
InitSnowsControls();
|
InitSnowsControls();
|
||||||
hSidePfps = ImageList_Create(32, 32, ILC_COLOR32 | ILC_MASK, 12, 1);
|
hSidePfps = ImageList_Create(32, 32, ILC_COLOR32 | ILC_MASK, 12, 1);
|
||||||
hChannelImgList = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 8, 1);
|
hChannelImgList = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 8, 1);
|
||||||
ImageList_AddMasked(hChannelImgList,LoadBitmap(hinstance,MAKEINTRESOURCE(IDI_CHANNEL_CATEGORY)),RGB(255,0,255));
|
ImageList_AddMasked(
|
||||||
ImageList_AddMasked(hChannelImgList,LoadBitmap(hinstance,MAKEINTRESOURCE(IDI_CHANNEL_TC)),RGB(255,0,255));
|
hChannelImgList,
|
||||||
ImageList_AddMasked(hChannelImgList,LoadBitmap(hinstance,MAKEINTRESOURCE(IDI_CHANNEL_VC)),RGB(255,0,255));
|
LoadBitmap(hinstance, MAKEINTRESOURCE(IDI_CHANNEL_CATEGORY)),
|
||||||
ImageList_AddMasked(hChannelImgList,LoadBitmap(hinstance,MAKEINTRESOURCE(IDI_CHANNEL_ANC)),RGB(255,0,255));
|
RGB(255, 0, 255));
|
||||||
ImageList_AddMasked(hChannelImgList,LoadBitmap(hinstance,MAKEINTRESOURCE(IDI_CHANNEL_FORUM)),RGB(255,0,255));
|
ImageList_AddMasked(hChannelImgList,
|
||||||
|
LoadBitmap(hinstance, MAKEINTRESOURCE(IDI_CHANNEL_TC)),
|
||||||
|
RGB(255, 0, 255));
|
||||||
|
ImageList_AddMasked(hChannelImgList,
|
||||||
|
LoadBitmap(hinstance, MAKEINTRESOURCE(IDI_CHANNEL_VC)),
|
||||||
|
RGB(255, 0, 255));
|
||||||
|
ImageList_AddMasked(hChannelImgList,
|
||||||
|
LoadBitmap(hinstance, MAKEINTRESOURCE(IDI_CHANNEL_ANC)),
|
||||||
|
RGB(255, 0, 255));
|
||||||
|
ImageList_AddMasked(
|
||||||
|
hChannelImgList,
|
||||||
|
LoadBitmap(hinstance, MAKEINTRESOURCE(IDI_CHANNEL_FORUM)),
|
||||||
|
RGB(255, 0, 255));
|
||||||
hInstance = hinstance;
|
hInstance = hinstance;
|
||||||
// register the window claws
|
// register the window claws
|
||||||
const char CLASS_NAME[] = "BackcordMain";
|
const char CLASS_NAME[] = "BackcordMain";
|
||||||
@@ -133,7 +145,7 @@ void onDiscordGuildLoad(DiscordGuild *guild, char *id) {
|
|||||||
wsprintfA(path, "%s%s.png", tempPath, guild->IconHash);
|
wsprintfA(path, "%s%s.png", tempPath, guild->IconHash);
|
||||||
if (GetFileAttributesA(path) == INVALID_FILE_ATTRIBUTES) {
|
if (GetFileAttributesA(path) == INVALID_FILE_ATTRIBUTES) {
|
||||||
path = DiscordFetchTmpGuildIcon(guild->id,
|
path = DiscordFetchTmpGuildIcon(guild->id,
|
||||||
guild->IconHash); // testing
|
guild->IconHash); // testing
|
||||||
}
|
}
|
||||||
GuildView_SetIcon(hGSel, LoadPNGImage(path), id);
|
GuildView_SetIcon(hGSel, LoadPNGImage(path), id);
|
||||||
free(path);
|
free(path);
|
||||||
@@ -182,7 +194,7 @@ void onDiscordReady(DiscordUser user, DiscordGuild *guilds, int guildscount) {
|
|||||||
int DestH = ClientRect.bottom - ClientRect.top;
|
int DestH = ClientRect.bottom - ClientRect.top;
|
||||||
|
|
||||||
SendMessage(hPfpAreaPfp, STM_SETIMAGE, IMAGE_BITMAP,
|
SendMessage(hPfpAreaPfp, STM_SETIMAGE, IMAGE_BITMAP,
|
||||||
(LPARAM)ResizeBitmap(LoadPNGBitmap(path),DestW,DestH));
|
(LPARAM)ResizeBitmap(LoadPNGBitmap(path), DestW, DestH));
|
||||||
|
|
||||||
free(path);
|
free(path);
|
||||||
}
|
}
|
||||||
@@ -276,9 +288,16 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
|||||||
90, 0, 128, rc.bottom - rc.top - 80, hwnd,
|
90, 0, 128, rc.bottom - rc.top - 80, hwnd,
|
||||||
(HMENU)103, hInstance, NULL);
|
(HMENU)103, hInstance, NULL);
|
||||||
TreeView_SetImageList(hChTree, hChannelImgList, 0);
|
TreeView_SetImageList(hChTree, hChannelImgList, 0);
|
||||||
hDMsList = CreateWindowExA(
|
hDMsList = CreateWindowExA(WS_EX_CLIENTEDGE, WC_LISTVIEWA, NULL,
|
||||||
WS_EX_CLIENTEDGE, WC_LISTVIEWA, NULL, WS_CHILD | WS_VISIBLE, 90, 0,
|
WS_CHILD | WS_VISIBLE | LVS_REPORT, 90, 0,
|
||||||
128, rc.bottom - rc.top - 80, hwnd, (HMENU)103, hInstance, NULL);
|
128, rc.bottom - rc.top - 80, hwnd,
|
||||||
|
(HMENU)106, hInstance, NULL);
|
||||||
|
LVCOLUMN lvc = {0};
|
||||||
|
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
||||||
|
lvc.cx = 128;
|
||||||
|
lvc.pszText = "Direct Messages";
|
||||||
|
lvc.iSubItem = 0;
|
||||||
|
ListView_InsertColumn(hDMsList, 0, &lvc);
|
||||||
ShowWindow(hDMsList, SW_HIDE);
|
ShowWindow(hDMsList, SW_HIDE);
|
||||||
hMsgList = CreateWindowEx(0, // Optional window styles.
|
hMsgList = CreateWindowEx(0, // Optional window styles.
|
||||||
"BackcordChat", // Window class
|
"BackcordChat", // Window class
|
||||||
@@ -309,8 +328,8 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
|||||||
NULL // Additional application data
|
NULL // Additional application data
|
||||||
);
|
);
|
||||||
hPfpAreaPfp = CreateWindowExA(
|
hPfpAreaPfp = CreateWindowExA(
|
||||||
0, "STATIC", "", SS_BITMAP | WS_CHILD | WS_VISIBLE,
|
0, "STATIC", "", SS_BITMAP | WS_CHILD | WS_VISIBLE, 12, 24, 36, 36,
|
||||||
12, 24, 36, 36, hPfpArea, NULL, GetModuleHandle(NULL), NULL);
|
hPfpArea, NULL, GetModuleHandle(NULL), NULL);
|
||||||
hPfpAreaDispName = CreateWindowExA(
|
hPfpAreaDispName = CreateWindowExA(
|
||||||
0, "STATIC", "Display Name", WS_CHILD | WS_VISIBLE, 54, 24, 144, 16,
|
0, "STATIC", "Display Name", WS_CHILD | WS_VISIBLE, 54, 24, 144, 16,
|
||||||
hPfpArea, NULL, GetModuleHandle(NULL), NULL);
|
hPfpArea, NULL, GetModuleHandle(NULL), NULL);
|
||||||
@@ -385,12 +404,13 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
|||||||
if (pNMHDR.hwndFrom == hGSel) {
|
if (pNMHDR.hwndFrom == hGSel) {
|
||||||
LPNMGUILDVIEW pnmv = (LPNMGUILDVIEW)lParam;
|
LPNMGUILDVIEW pnmv = (LPNMGUILDVIEW)lParam;
|
||||||
if (pnmv->index == GUILDVIEW_DMS) {
|
if (pnmv->index == GUILDVIEW_DMS) {
|
||||||
|
ShowWindow(hChTree, HIDE_WINDOW);
|
||||||
|
ShowWindow(hDMsList, 1);
|
||||||
DiscordChannel *dms;
|
DiscordChannel *dms;
|
||||||
int cnt = DiscordListPrivateChannels(&dms);
|
int cnt = DiscordListPrivateChannels(&dms);
|
||||||
TreeView_DeleteAllItems(hChTree);
|
ListView_DeleteAllItems(hDMsList);
|
||||||
TreeView_SetImageList(hChTree, hSidePfps, TVSIL_NORMAL);
|
ListView_SetImageList(hDMsList, hSidePfps, LVSIL_SMALL);
|
||||||
TVINSERTSTRUCT tvInsert = {0};
|
LVITEM lvItem = {0};
|
||||||
HTREEITEM hParent = TVI_ROOT;
|
|
||||||
int pfpidx = 0;
|
int pfpidx = 0;
|
||||||
for (int i = 0; i < cnt; i++) {
|
for (int i = 0; i < cnt; i++) {
|
||||||
if (dms[i].type == CHANNEL_DM) {
|
if (dms[i].type == CHANNEL_DM) {
|
||||||
@@ -424,29 +444,23 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tvInsert.hParent = hParent; // Parent is the root item
|
lvItem.mask =
|
||||||
tvInsert.hInsertAfter = TVI_LAST;
|
LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
|
||||||
tvInsert.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_STATE |
|
lvItem.pszText = dms[i].receipents[0].DisplayName
|
||||||
TVIF_IMAGE;
|
? dms[i].receipents[0].DisplayName
|
||||||
tvInsert.item.pszText =
|
: dms[i].receipents[0].Username;
|
||||||
dms[i].receipents[0].DisplayName
|
lvItem.lParam = (LPARAM) & (dms[i]);
|
||||||
? dms[i].receipents[0].DisplayName
|
lvItem.iImage =
|
||||||
: dms[i].receipents[0].Username;
|
|
||||||
tvInsert.item.lParam = (LPARAM) & (dms[i]);
|
|
||||||
tvInsert.item.state = TVIS_EXPANDED;
|
|
||||||
tvInsert.item.stateMask = TVIS_EXPANDED;
|
|
||||||
tvInsert.item.iImage =
|
|
||||||
dms[i].receipents[0].avatar ? pfpidx : 0;
|
dms[i].receipents[0].avatar ? pfpidx : 0;
|
||||||
tvInsert.item.iSelectedImage =
|
ListView_InsertItem(hDMsList, &lvItem);
|
||||||
dms[i].receipents[0].avatar ? pfpidx : 0;
|
|
||||||
HTREEITEM lres = (HTREEITEM)SendMessage(
|
|
||||||
hChTree, TVM_INSERTITEM, 0, (LPARAM)&tvInsert);
|
|
||||||
if (dms[i].receipents[0].avatar) {
|
if (dms[i].receipents[0].avatar) {
|
||||||
pfpidx++;
|
pfpidx++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
ShowWindow(hChTree, 1);
|
||||||
|
ShowWindow(hDMsList, HIDE_WINDOW);
|
||||||
DiscordGuild *guild;
|
DiscordGuild *guild;
|
||||||
guild = pnmv->guild.data;
|
guild = pnmv->guild.data;
|
||||||
|
|
||||||
@@ -455,14 +469,15 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
|||||||
DiscordListGuildChannels(guild->id, &Channels);
|
DiscordListGuildChannels(guild->id, &Channels);
|
||||||
TreeView_SelectItem(hChTree, NULL);
|
TreeView_SelectItem(hChTree, NULL);
|
||||||
TreeView_DeleteAllItems(hChTree);
|
TreeView_DeleteAllItems(hChTree);
|
||||||
//TreeView_SetImageList(hChTree, hChannelImgList, TVSIL_NORMAL);
|
// TreeView_SetImageList(hChTree, hChannelImgList,
|
||||||
|
// TVSIL_NORMAL);
|
||||||
struct hashmap *ChannelUITable =
|
struct hashmap *ChannelUITable =
|
||||||
hashmap_new(sizeof(ChannelUIEntry), 0, 0, 0, channel_hash,
|
hashmap_new(sizeof(ChannelUIEntry), 0, 0, 0, channel_hash,
|
||||||
channel_compare, NULL, NULL);
|
channel_compare, NULL, NULL);
|
||||||
for (int i = 0; i < ChannelCount; i++) {
|
for (int i = 0; i < ChannelCount; i++) {
|
||||||
char *VisualName;
|
char *VisualName;
|
||||||
VisualName = malloc(strlen(Channels[i].name)+1);
|
VisualName = malloc(strlen(Channels[i].name) + 1);
|
||||||
strcpy(VisualName, Channels[i].name);
|
strcpy(VisualName, Channels[i].name);
|
||||||
TVINSERTSTRUCT tvInsert = {0};
|
TVINSERTSTRUCT tvInsert = {0};
|
||||||
HTREEITEM hParent = TVI_ROOT;
|
HTREEITEM hParent = TVI_ROOT;
|
||||||
if (Channels[i].parentID) {
|
if (Channels[i].parentID) {
|
||||||
@@ -483,17 +498,16 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
|||||||
tvInsert.item.lParam = (LPARAM) & (Channels[i]);
|
tvInsert.item.lParam = (LPARAM) & (Channels[i]);
|
||||||
tvInsert.item.state = TVIS_EXPANDED;
|
tvInsert.item.state = TVIS_EXPANDED;
|
||||||
tvInsert.item.stateMask = TVIS_EXPANDED;
|
tvInsert.item.stateMask = TVIS_EXPANDED;
|
||||||
if(Channels[i].type==GUILD_CATEGORY){
|
if (Channels[i].type == GUILD_CATEGORY) {
|
||||||
tvInsert.item.iImage=0;
|
tvInsert.item.iImage = 0;
|
||||||
}
|
} else if (Channels[i].type == GUILD_VOICE) {
|
||||||
else if(Channels[i].type==GUILD_VOICE){
|
tvInsert.item.iImage = 2;
|
||||||
tvInsert.item.iImage=2;
|
} else if (Channels[i].type == GUILD_ANNOUNCEMENT) {
|
||||||
}else if(Channels[i].type==GUILD_ANNOUNCEMENT){
|
tvInsert.item.iImage = 3;
|
||||||
tvInsert.item.iImage=3;
|
} else if (Channels[i].type == GUILD_FORUM) {
|
||||||
}else if(Channels[i].type==GUILD_FORUM){
|
tvInsert.item.iImage = 4;
|
||||||
tvInsert.item.iImage=4;
|
} else {
|
||||||
}else{
|
tvInsert.item.iImage = 1;
|
||||||
tvInsert.item.iImage=1;
|
|
||||||
}
|
}
|
||||||
HTREEITEM lres = (HTREEITEM)SendMessage(
|
HTREEITEM lres = (HTREEITEM)SendMessage(
|
||||||
hChTree, TVM_INSERTITEM, 0, (LPARAM)&tvInsert);
|
hChTree, TVM_INSERTITEM, 0, (LPARAM)&tvInsert);
|
||||||
@@ -512,14 +526,16 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
|||||||
DiscordChannel *chnl = ((DiscordChannel *)pnmv->itemNew.lParam);
|
DiscordChannel *chnl = ((DiscordChannel *)pnmv->itemNew.lParam);
|
||||||
if (chnl->type != GUILD_CATEGORY) {
|
if (chnl->type != GUILD_CATEGORY) {
|
||||||
char *title = NULL;
|
char *title = NULL;
|
||||||
if(chnl->type==CHANNEL_DM){
|
if (chnl->type == CHANNEL_DM) {
|
||||||
title = malloc(12 + strlen(chnl->receipents[0].DisplayName));
|
title = malloc(12 +
|
||||||
wsprintf(title, "Backcord - %s", chnl->receipents[0].DisplayName);
|
strlen(chnl->receipents[0].DisplayName));
|
||||||
SetWindowTextA(hwnd, title);
|
wsprintf(title, "Backcord - %s",
|
||||||
}else{
|
chnl->receipents[0].DisplayName);
|
||||||
title = malloc(13 + strlen(chnl->name));
|
SetWindowTextA(hwnd, title);
|
||||||
wsprintf(title, "Backcord - #%s", chnl->name);
|
} else {
|
||||||
SetWindowTextA(hwnd, title);
|
title = malloc(13 + strlen(chnl->name));
|
||||||
|
wsprintf(title, "Backcord - #%s", chnl->name);
|
||||||
|
SetWindowTextA(hwnd, title);
|
||||||
}
|
}
|
||||||
DiscordMessage *msgs;
|
DiscordMessage *msgs;
|
||||||
int msgcnt = DiscordGetChannelHistory(chnl->id, 50, &msgs);
|
int msgcnt = DiscordGetChannelHistory(chnl->id, 50, &msgs);
|
||||||
|
|||||||
Reference in New Issue
Block a user