source: AE/RequestHelp/src/mailFromGui.c@ 1007

Last change on this file since 1007 was 1005, checked in by alloc, 10 years ago

RequestHelp initial commit

File size: 4.3 KB
Line 
1#include "mailFromGui.h"
2
3#include <stdio.h>
4#include <stdint.h>
5#include <stdbool.h>
6
7
8#define WIN_WIDTH 450
9#define WIN_HEIGHT 270
10
11enum {
12 TXT_INFO,
13 TXT_MAIL,
14 EDIT_MAIL,
15 CHK_CC,
16 BTN_SEND,
17 BTN_ABORT
18} window_objects;
19
20bool isSendSelected = false;
21bool isCCSelected = false;
22char* emailFrom = 0;
23
24static HWND hwndEditMail;
25
26static bool verifyMail() {
27 char* at = strchr(emailFrom, '@');
28 char* dot = strrchr(emailFrom, '.');
29 if (at == NULL || dot == NULL)
30 return false;
31 if (dot <= at)
32 return false;
33
34 unsigned int atPos = at - emailFrom;
35 unsigned int dotPos = dot - emailFrom;
36 if (atPos < 1 || (dotPos - atPos) < 2)
37 return false;
38 if (dotPos >= strlen(emailFrom)-1)
39 return false;
40
41 return true;
42}
43
44static void handleWindowCreate(HWND hwnd) {
45 static LPCSTR txtInfo = "\
46With this program you can request help from the AE\n\
47support team if you have trouble installing the AE.\n\
48\n\
49Please only use this if you are asked to on the forum!\n\
50\n\
51The information that is sent is:\n\
52- AEI updater's updater_output.log\n\
53- AEI-ProxySettings.xml\n\
54- A list of files within your AE/ folder";
55
56 int top = 0, left = 5;
57 int height, width = WIN_WIDTH - 2*left - 4;
58
59 top += 5;
60 height = 150;
61 CreateWindowA("STATIC", txtInfo,
62 WS_CHILD | WS_VISIBLE | SS_LEFT,
63 left, top, width, height,
64 hwnd, (HMENU) TXT_INFO, NULL, NULL);
65
66 top += height + 5;
67 height = 20;
68 width = 145;
69 CreateWindowA("STATIC", "Your e-mail address:",
70 WS_CHILD | WS_VISIBLE | SS_LEFT,
71 left, top, width, height,
72 hwnd, (HMENU) TXT_MAIL, NULL, NULL);
73 left += width + 5;
74 width = WIN_WIDTH - 20 - width;
75 hwndEditMail = CreateWindowA("Edit", NULL,
76 WS_CHILD | WS_VISIBLE | WS_BORDER,
77 left, top, width, height, hwnd, (HMENU) EDIT_MAIL,
78 NULL, NULL);
79 left = 5;
80 width = WIN_WIDTH - 2*left - 4;
81
82 top += height + 5;
83 height = 20;
84 CreateWindowA("button", "Send a copy of the mail to you",
85 WS_VISIBLE | WS_CHILD | BS_CHECKBOX,
86 left, top, width, height, hwnd, (HMENU) CHK_CC,
87 NULL, NULL);
88
89 top += height + 5;
90 height = 28;
91 width = 100;
92 left = WIN_WIDTH - 3*5 - 2*width;
93 CreateWindowA("button", "Send request",
94 WS_VISIBLE | WS_CHILD ,
95 left, top, width, height,
96 hwnd, (HMENU) BTN_SEND, NULL, NULL);
97 left = WIN_WIDTH - 2*5 - 1*width;
98 CreateWindowA("button", "Abort",
99 WS_VISIBLE | WS_CHILD ,
100 left, top, width, height,
101 hwnd, (HMENU) BTN_ABORT, NULL, NULL);
102}
103
104static void handleWindowCommand(HWND hwnd, WPARAM wParam) {
105 bool checked;
106 int len;
107
108 switch (LOWORD(wParam)) {
109 case BTN_SEND:
110 len = GetWindowTextLengthA(hwndEditMail) + 1;
111 emailFrom = malloc(len);
112 GetWindowTextA(hwndEditMail, emailFrom, len);
113
114 if (verifyMail()) {
115 isSendSelected = true;
116 ShowWindow(hwnd, SW_HIDE);
117 PostQuitMessage(0);
118 } else {
119 MessageBox(hwnd, "Please enter a valid e-mail address", "Invalid e-mail", MB_OK | MB_ICONEXCLAMATION);
120 }
121 break;
122 case BTN_ABORT:
123 PostQuitMessage(0);
124 break;
125 case CHK_CC:
126 checked = IsDlgButtonChecked(hwnd, CHK_CC);
127 if (checked) {
128 CheckDlgButton(hwnd, CHK_CC, BST_UNCHECKED);
129 isCCSelected = false;
130 } else {
131 CheckDlgButton(hwnd, CHK_CC, BST_CHECKED);
132 isCCSelected = true;
133 }
134 break;
135 }
136}
137
138static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
139{
140 switch(msg)
141 {
142 case WM_CREATE:
143 handleWindowCreate(hwnd);
144 break;
145
146 case WM_COMMAND:
147 handleWindowCommand(hwnd, wParam);
148 break;
149
150 case WM_DESTROY:
151 PostQuitMessage(0);
152 return 0;
153 }
154
155 return DefWindowProcW(hwnd, msg, wParam, lParam);
156}
157
158
159void mailFromGui(HMODULE hInstance, int nCmdShow)
160{
161 static const LPCWSTR title = L"Request Help";
162
163 MSG msg;
164 HWND hwnd;
165 WNDCLASSW wc;
166
167 wc.style = CS_HREDRAW | CS_VREDRAW;
168 wc.cbClsExtra = 0;
169 wc.cbWndExtra = 0;
170 wc.lpszClassName = L"Window";
171 wc.hInstance = hInstance;
172 wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
173 wc.lpszMenuName = NULL;
174 wc.lpfnWndProc = WndProc;
175 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
176 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
177
178 RegisterClassW(&wc);
179 hwnd = CreateWindowW( wc.lpszClassName, title,
180 WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_VISIBLE,
181 CW_USEDEFAULT, CW_USEDEFAULT, WIN_WIDTH, WIN_HEIGHT, NULL, NULL, hInstance, NULL);
182
183 ShowWindow(hwnd, nCmdShow);
184 UpdateWindow(hwnd);
185
186 while( GetMessage(&msg, NULL, 0, 0)) {
187 TranslateMessage(&msg);
188 DispatchMessage(&msg);
189 }
190}
191
Note: See TracBrowser for help on using the repository browser.