Skip to content

Commit

Permalink
* Add background watermark alignment option.
Browse files Browse the repository at this point in the history
Closes #95.

* Fix some infuriating dialog layout issues.
They sure were infuritating.

* Fix default attachment in image background issue.
  • Loading branch information
iProgramMC committed Jun 7, 2024
1 parent ef1569d commit 6e0b5d1
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 55 deletions.
4 changes: 4 additions & 0 deletions src/discord/LocalSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ bool LocalSettings::Load()
if (j.contains("ImageBackgroundFileName"))
m_imageBackgroundFileName = j["ImageBackgroundFileName"];

if (j.contains("WatermarkAlignment"))
m_imageAlignment = eImageAlignment(int(j["WatermarkAlignment"]));

if (m_bSaveWindowSize)
{
if (j.contains("WindowWidth"))
Expand Down Expand Up @@ -132,6 +135,7 @@ bool LocalSettings::Save()
j["ShowScrollBarOnGuildList"] = m_bShowScrollBarOnGuildList;
j["RemindUpdateCheckOn"] = (long long)(m_remindUpdatesOn);
j["ImageBackgroundFileName"] = m_imageBackgroundFileName;
j["WatermarkAlignment"] = int(m_imageAlignment);

if (m_bSaveWindowSize) {
j["WindowWidth"] = m_width;
Expand Down
23 changes: 22 additions & 1 deletion src/discord/LocalSettings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,20 @@ enum eMessageStyle
MS_MAX,
};

enum eImageAlignment
{
ALIGN_LOWER_RIGHT,
ALIGN_UPPER_LEFT,
ALIGN_CENTER,
ALIGN_UPPER_RIGHT,
ALIGN_LOWER_LEFT,
ALIGN_UPPER_CENTER,
ALIGN_LOWER_CENTER,
ALIGN_MIDDLE_LEFT,
ALIGN_MIDDLE_RIGHT,
ALIGN_COUNT,
};

class LocalSettings
{
public:
Expand Down Expand Up @@ -113,13 +127,20 @@ class LocalSettings
void SetImageBackgroundFileName(const std::string& fn) {
m_imageBackgroundFileName = fn;
}
eImageAlignment GetImageAlignment() const {
return m_imageAlignment;
}
void SetImageAlignment(eImageAlignment align) {
m_imageAlignment = align;
}

private:
std::string m_token;
std::string m_discordApi;
std::string m_discordCdn;
std::set<std::string> m_trustedDomains;
eMessageStyle m_messageStyle = MS_GRADIENT;
eImageAlignment m_imageAlignment = ALIGN_LOWER_RIGHT;
std::string m_imageBackgroundFileName = "";
bool m_bReplyMentionDefault = true;
bool m_bSaveWindowSize = false;
Expand All @@ -129,7 +150,7 @@ class LocalSettings
bool m_bAskToCheckUpdates = true;
bool m_bEnableTLSVerification = true;
bool m_bDisableFormatting = false;
bool m_bShowScrollBarOnGuildList = true;
bool m_bShowScrollBarOnGuildList = false;
time_t m_remindUpdatesOn = 0;
int m_width = 1000;
int m_height = 700;
Expand Down
4 changes: 3 additions & 1 deletion src/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,8 @@
#define IDC_ACTIVE_IMAGE_EDIT 886
#define IDC_COMBOBOXEX1 887
#define IDC_GUILD_LIST 888
#define IDC_COMBO1 889
#define IDC_COMBO_ALIGNMENT 889
#define ID_FILE_PREFERENCES 1001
#define ID_FILE_STOPALLSPEECH 1002
#define ID_FILE_EXIT 1003
Expand Down Expand Up @@ -460,7 +462,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 1069
#define _APS_NEXT_CONTROL_VALUE 889
#define _APS_NEXT_CONTROL_VALUE 890
#define _APS_NEXT_SYMED_VALUE 40000
#endif
#endif
87 changes: 45 additions & 42 deletions src/resource.rc
Original file line number Diff line number Diff line change
Expand Up @@ -419,24 +419,24 @@ IDD_DIALOG_MY_ACCOUNT DIALOGEX 0, 0, 260, 242
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
GROUPBOX "My Account",IDC_MY_ACCOUNT_BOX,6,6,246,53
LTEXT "User Name#Tag",IDC_MY_ACCOUNT_NAME,54,25,190,8
LTEXT "*******@*****.com",IDC_EMAIL_DISPLAY,54,42,126,8
LTEXT "Email:",IDC_EMAIL_TEXT,12,42,20,8
PUSHBUTTON "Reveal Email",IDC_REVEALEMAIL,182,38,64,15
GROUPBOX "Safe direct messaging",IDC_STATIC,6,60,246,90
GROUPBOX "My Account",IDC_MY_ACCOUNT_BOX,6,7,248,52
LTEXT "User Name#Tag",IDC_MY_ACCOUNT_NAME,54,18,194,20,SS_CENTERIMAGE
LTEXT "*******@*****.com",IDC_EMAIL_DISPLAY,54,40,126,14,SS_CENTERIMAGE
LTEXT "Email:",IDC_EMAIL_TEXT,12,40,20,14,SS_CENTERIMAGE
PUSHBUTTON "Reveal Email",IDC_REVEALEMAIL,184,40,64,14
GROUPBOX "Safe direct messaging",IDC_STATIC,6,60,248,90
LTEXT "Automatically scan and delete direct messages you receive that contain explicit media content.",IDC_STATIC,12,72,234,18
CONTROL "I live on the edge\nTurn this off. Don't scan anything. Go straight to the dark side.",IDC_SDM_LEVEL0,
"Button",BS_AUTORADIOBUTTON | BS_MULTILINE,12,126,234,18
CONTROL "My friends are nice\nScan direct messages from everyone unless they are a friend.",IDC_SDM_LEVEL1,
"Button",BS_AUTORADIOBUTTON | BS_MULTILINE,12,108,234,18
CONTROL "Keep me safe\nScan direct messages from everyone.",IDC_SDM_LEVEL2,
"Button",BS_AUTORADIOBUTTON | BS_MULTILINE,12,90,234,18
GROUPBOX "Server privacy defaults",IDC_STATIC,6,150,246,42
GROUPBOX "Server privacy defaults",IDC_STATIC,6,150,248,42
CONTROL "Allow direct messages from server members.",IDC_ENABLE_DMS,
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,12,162,234,8
LTEXT "This setting is applied when you join a new server. It does not apply retroactively to your existing servers.",IDC_STATIC,23,171,223,17
GROUPBOX "Log Out",IDC_STATIC,6,192,246,42
GROUPBOX "Log Out",IDC_STATIC,6,192,248,42
LTEXT "Click this button to log out. Discord Messenger will only forget your token, it won't be revoked.",IDC_STATIC,12,200,234,17
PUSHBUTTON "Log Out",IDC_LOG_OUT,104,216,50,14
CONTROL "",IDC_STATIC_PROFILE_IMAGE,"Static",SS_BITMAP | SS_CENTERIMAGE,12,18,24,22
Expand All @@ -446,25 +446,28 @@ IDD_DIALOG_APPEARANCE DIALOGEX 0, 0, 260, 242
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
GROUPBOX "Message Display",IDC_MDISPLAY_BOX,6,6,245,88
GROUPBOX "Message Display",IDC_MDISPLAY_BOX,6,7,248,87
CONTROL "Cozy: Modern, beautiful, and easy on your eyes.",IDC_APPEARANCE_COZY,
"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,18,232,10
"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,18,236,10
CONTROL "Compact: Fit more messages on screen at one time. #IRC",IDC_APPEARANCE_COMPACT,
"Button",BS_AUTORADIOBUTTON,12,30,232,10
GROUPBOX "Message List Style",IDC_MSTYLE_BOX,6,95,245,46
GROUPBOX "Window Settings",IDC_STATIC,6,144,245,52
CONTROL "Save window size",IDC_SAVE_WINDOW_SIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,156,232,10
CONTROL "Start maximized",IDC_START_MAXIMIZED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,169,232,10
"Button",BS_AUTORADIOBUTTON,12,30,236,10
GROUPBOX "Message List Style",IDC_MSTYLE_BOX,6,96,248,29
GROUPBOX "Window Settings",IDC_STATIC,6,179,248,55
CONTROL "Save window size",IDC_SAVE_WINDOW_SIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,191,236,10
CONTROL "Start maximized",IDC_START_MAXIMIZED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,204,236,10
CONTROL "Disable markdown formatting",IDC_DISABLE_FORMATTING,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,45,232,10
LTEXT "Disable markdown formatting if:\n- You operate frequently with right-to-left scripts such as Arabic.\n- You are running into performance issues (message channels are taking too long to load, etc)",IDC_STATIC,12,57,232,34
LTEXT "Message theme:",IDC_STATIC,12,105,63,13,SS_CENTERIMAGE
PUSHBUTTON "Change...",IDC_ACTIVE_IMAGE_BROWSE,194,122,50,14
EDITTEXT IDC_ACTIVE_IMAGE_EDIT,60,122,130,14,ES_AUTOHSCROLL | ES_READONLY
LTEXT "Active image:",IDC_STATIC,12,122,46,14,SS_CENTERIMAGE
COMBOBOX IDC_MESSAGE_STYLE,81,105,163,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,45,236,10
LTEXT "Disable markdown formatting if:\n- You operate frequently with right-to-left scripts such as Arabic.\n- You are running into performance issues (message channels are taking too long to load, etc)",IDC_STATIC,12,57,236,34
LTEXT "Message theme:",IDC_STATIC,12,106,53,13,SS_CENTERIMAGE
PUSHBUTTON "Change...",IDC_ACTIVE_IMAGE_BROWSE,198,138,50,14
EDITTEXT IDC_ACTIVE_IMAGE_EDIT,49,138,139,14,ES_AUTOHSCROLL | ES_READONLY
LTEXT "Image:",IDC_STATIC,12,138,37,14,SS_CENTERIMAGE
COMBOBOX IDC_MESSAGE_STYLE,73,106,175,58,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Show scroll bar on server list",IDC_SCROLL_BAR_ON_GUILDS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,182,232,10
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,218,236,10
COMBOBOX IDC_COMBO_ALIGNMENT,53,156,195,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Aligned to:",IDC_STATIC,12,156,37,12,SS_CENTERIMAGE
GROUPBOX "Message List Watermark",IDC_STATIC,6,127,248,48
END

IDD_DIALOG_PROFILE_POPOUT DIALOGEX 0, 0, 126, 134
Expand Down Expand Up @@ -579,25 +582,25 @@ IDD_DIALOG_CONNECTION DIALOGEX 0, 0, 260, 242
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
GROUPBOX "Discord API && CDN",IDC_STATIC,6,7,245,128
GROUPBOX "Discord API && CDN",IDC_STATIC,6,7,248,128
LTEXT "Discord API URL:",IDC_STATIC,12,20,55,8
LTEXT "Discord CDN URL:",IDC_STATIC,12,35,58,8
EDITTEXT IDC_EDIT_DISCORDAPI,72,17,174,14,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT_DISCORDCDN,72,33,174,14,ES_AUTOHSCROLL
PUSHBUTTON "Revert to official Discord backend",IDC_REVERTTODEFAULT,11,116,118,14
PUSHBUTTON "Update",IDC_UPDATE,197,116,50,14
ICON IDI_WARNING_IC,IDC_ICON_WARN_CONNECT,11,55,20,20,SS_REALSIZEIMAGE
LTEXT "For security reasons, when you update the URLs that Discord Messenger uses to interface with Discord's backend, you will be logged out. (your token is forgotten but not revoked)",IDC_STATIC,30,54,214,31
ICON IDI_WARNING_IC,IDC_ICON_WARN_WEBSOCKETSTUFF,12,87,20,20,SS_REALSIZEIMAGE
LTEXT "Wondering where the websocket gateway URL is located? Well, Discord Messenger issues a request to API_URL/gateway, which tells it the websocket URL to use.",IDC_STATIC,30,87,214,29
GROUPBOX "Security Settings",IDC_STATIC,6,139,245,48
ICON IDI_WARNING_IC,IDC_ICON_WARN_WEBSOCKETSTUFF2,12,166,20,20,SS_REALSIZEIMAGE
LTEXT "WARNING: Disabling TLS certificate verification could expose you to MITM (man-in-the-middle) attacks via certificate spoofing!",IDC_STATIC,30,165,214,19
PUSHBUTTON "Revert to official Discord backend",IDC_REVERTTODEFAULT,12,116,118,14
PUSHBUTTON "Update",IDC_UPDATE,198,116,50,14
ICON IDI_WARNING_IC,IDC_ICON_WARN_CONNECT,12,55,21,20,SS_REALSIZEIMAGE
LTEXT "For security reasons, when you update the URLs that Discord Messenger uses to interface with Discord's backend, you will be logged out. (your token is forgotten but not revoked)",IDC_STATIC,33,54,215,31
ICON IDI_WARNING_IC,IDC_ICON_WARN_WEBSOCKETSTUFF,12,87,21,20,SS_REALSIZEIMAGE
LTEXT "Wondering where the websocket gateway URL is located? Well, Discord Messenger issues a request to API_URL/gateway, which tells it the websocket URL to use.",IDC_STATIC,33,87,215,29
GROUPBOX "Security Settings",IDC_STATIC,6,139,248,48
ICON IDI_WARNING_IC,IDC_ICON_WARN_WEBSOCKETSTUFF2,12,166,21,20,SS_REALSIZEIMAGE
LTEXT "WARNING: Disabling TLS certificate verification could expose you to MITM (man-in-the-middle) attacks via certificate spoofing!",IDC_STATIC,33,165,215,19
CONTROL "Enable TLS certificate verification",IDC_ENABLE_TLS_CHECKS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,151,230,10
GROUPBOX "Check for Updates",IDC_STATIC,6,194,245,40
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,151,230,10
GROUPBOX "Check for Updates",IDC_STATIC,6,194,248,40
CONTROL "Check for updates using the GitHub API",IDC_CHECK_UPDATES,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,204,232,10
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,204,236,10
LTEXT "iProgramInCpp cannot see your IP address via the update service.",IDC_STATIC,12,219,231,10
END

Expand Down Expand Up @@ -654,19 +657,19 @@ BEGIN
IDD_DIALOG_MY_ACCOUNT, DIALOG
BEGIN
LEFTMARGIN, 6
RIGHTMARGIN, 251
RIGHTMARGIN, 254
TOPMARGIN, 7
BOTTOMMARGIN, 234
HORZGUIDE, 40
HORZGUIDE, 54
END

IDD_DIALOG_APPEARANCE, DIALOG
BEGIN
LEFTMARGIN, 6
RIGHTMARGIN, 251
VERTGUIDE, 12
VERTGUIDE, 244
RIGHTMARGIN, 254
TOPMARGIN, 7
BOTTOMMARGIN, 232
BOTTOMMARGIN, 234
END

IDD_DIALOG_PROFILE_POPOUT, DIALOG
Expand Down Expand Up @@ -727,7 +730,7 @@ BEGIN
IDD_DIALOG_CONNECTION, DIALOG
BEGIN
LEFTMARGIN, 6
RIGHTMARGIN, 251
RIGHTMARGIN, 254
TOPMARGIN, 7
BOTTOMMARGIN, 234
END
Expand Down
43 changes: 37 additions & 6 deletions src/windows/MessageList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1442,6 +1442,8 @@ void MessageList::DrawDefaultAttachment(HDC hdc, RECT& paintRect, AttachmentItem
COLORREF old = CLR_NONE;
if (attachItem.m_bHighlighted && inView)
old = SetTextColor(hdc, RGB(0, 0, 255));
else
old = SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));

LPCTSTR name = attachItem.m_nameText;
RECT rcMeasure;
Expand Down Expand Up @@ -1479,9 +1481,10 @@ void MessageList::DrawDefaultAttachment(HDC hdc, RECT& paintRect, AttachmentItem

attachItem.m_textRect = textRect;

if (attachItem.m_bHighlighted && inView)
SetTextColor(hdc, old);

uint32_t oc = SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));
if (old == CLR_NONE)
old = oc;

LPCTSTR sizeStr = attachItem.m_sizeText;
textRect.top += rcMeasure.bottom;
textRect.bottom += rcMeasure.bottom;
Expand All @@ -1492,6 +1495,9 @@ void MessageList::DrawDefaultAttachment(HDC hdc, RECT& paintRect, AttachmentItem
DrawText(hdc, sizeStr, -1, &textRect, DT_NOPREFIX | DT_NOCLIP);
}

if (old != CLR_NONE)
SetTextColor(hdc, old);

int dlIconSize = iconSize / 2;

int dlIconX = childAttachRect.right - 4 - iconSize + (iconSize - dlIconSize) / 2;
Expand Down Expand Up @@ -2790,10 +2796,35 @@ void MessageList::PaintBackground(HDC hdc, RECT& paintRect, RECT& rcClient)
BITMAP bm{};
GetObject(m_backgroundImage, (int)sizeof bm, &bm);

int x = rcClient.right - bm.bmWidth;
int y = rcClient.bottom - bm.bmHeight;
int x = 0, y = 0;
// x axis
switch (GetLocalSettings()->GetImageAlignment())
{
case ALIGN_UPPER_LEFT:
case ALIGN_MIDDLE_LEFT:
case ALIGN_LOWER_LEFT: x = 0; break;
case ALIGN_UPPER_CENTER:
case ALIGN_CENTER:
case ALIGN_LOWER_CENTER: x = rcClient.left + (rcClient.right - rcClient.left - bm.bmWidth) / 2; break;
case ALIGN_UPPER_RIGHT:
case ALIGN_MIDDLE_RIGHT:
case ALIGN_LOWER_RIGHT: x = rcClient.right - bm.bmWidth; break;
}
// y axis
switch (GetLocalSettings()->GetImageAlignment())
{
case ALIGN_UPPER_LEFT:
case ALIGN_UPPER_CENTER:
case ALIGN_UPPER_RIGHT: y = 0; break;
case ALIGN_MIDDLE_LEFT:
case ALIGN_CENTER:
case ALIGN_MIDDLE_RIGHT: y = rcClient.top + (rcClient.bottom - rcClient.top - bm.bmHeight) / 2; break;
case ALIGN_LOWER_LEFT:
case ALIGN_LOWER_CENTER:
case ALIGN_LOWER_RIGHT: y = rcClient.bottom - bm.bmHeight; break;
}

RECT rcImg = { x, y, rcClient.right, rcClient.bottom };
RECT rcImg = { x, y, x + bm.bmWidth, y + bm.bmHeight };
RECT dummy;
if (!IntersectRect(&dummy, &rcImg, &paintRect))
return;
Expand Down
38 changes: 37 additions & 1 deletion src/windows/OptionsDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,24 @@ void WINAPI OnChildDialogInit(HWND hwndDlg)
}
}

hCBox = GetDlgItem(hwndDlg, IDC_COMBO_ALIGNMENT);
// NOTE: these must match the order in eImageAlignment!
ComboBox_AddString(hCBox, TEXT("Lower right"));
ComboBox_AddString(hCBox, TEXT("Upper left"));
ComboBox_AddString(hCBox, TEXT("Center"));
ComboBox_AddString(hCBox, TEXT("Upper right"));
ComboBox_AddString(hCBox, TEXT("Lower left"));
ComboBox_AddString(hCBox, TEXT("Upper center"));
ComboBox_AddString(hCBox, TEXT("Lower center"));
ComboBox_AddString(hCBox, TEXT("Middle left"));
ComboBox_AddString(hCBox, TEXT("Middle right"));
ComboBox_SetCurSel(hCBox, int(GetLocalSettings()->GetImageAlignment()));

bool isWatermarkStyle = msgStyle == MS_IMAGE;
EnableWindow(GetDlgItem(hwndDlg, IDC_ACTIVE_IMAGE_EDIT), isWatermarkStyle);
EnableWindow(GetDlgItem(hwndDlg, IDC_ACTIVE_IMAGE_BROWSE), isWatermarkStyle);
EnableWindow(GetDlgItem(hwndDlg, IDC_COMBO_ALIGNMENT), isWatermarkStyle);

break;
}
case PG_CONNECTION:
Expand Down Expand Up @@ -295,12 +313,30 @@ INT_PTR CALLBACK ChildDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPa
GetLocalSettings()->SetMessageStyle(style);

bool enable = style == MS_IMAGE;
EnableWindow(GetDlgItem(hWnd, IDC_ACTIVE_IMAGE_BROWSE), enable);
EnableWindow(GetDlgItem(hWnd, IDC_ACTIVE_IMAGE_EDIT), enable);
EnableWindow(GetDlgItem(hWnd, IDC_ACTIVE_IMAGE_BROWSE), enable);
EnableWindow(GetDlgItem(hWnd, IDC_COMBO_ALIGNMENT), enable);

SendMessage(g_Hwnd, WM_MSGLISTUPDATEMODE, 0, 0);
break;
}
case IDC_COMBO_ALIGNMENT:
{
if (HIWORD(wParam) != CBN_SELCHANGE)
break;

int sel = ComboBox_GetCurSel((HWND)lParam);
if (sel == CB_ERR || sel < 0 || sel >= int(ALIGN_COUNT))
break;

eImageAlignment align = eImageAlignment(sel);
GetLocalSettings()->SetImageAlignment(align);

if (GetLocalSettings()->GetMessageStyle() == MS_IMAGE)
SendMessage(g_Hwnd, WM_REPAINTMSGLIST, 0, 0);

break;
}
case IDC_ACTIVE_IMAGE_BROWSE:
{
const int MAX_FILE = 4096;
Expand Down
8 changes: 4 additions & 4 deletions vs/DiscordMessenger.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -375,11 +375,11 @@
<Image Include="..\res\icons\icon_boost_2k.ico">
<Filter>Resource Files\Resources\Icons</Filter>
</Image>
<Image Include="..\res\icons\icon_guilds.ico">
<Filter>Resource Files</Filter>
</Image>
<Image Include="..\res\icons\icon_scroll.ico">
<Filter>Resource Files</Filter>
<Filter>Resource Files\Resources\Icons</Filter>
</Image>
<Image Include="..\res\icons\icon_guilds.ico">
<Filter>Resource Files\Resources\Icons</Filter>
</Image>
</ItemGroup>
<ItemGroup>
Expand Down

0 comments on commit 6e0b5d1

Please sign in to comment.