Mercurial > quickqr
comparison QRForm.cs @ 0:aca8706f4eec default tip
Initial commit
author | Brad Greco <brad@bgreco.net> |
---|---|
date | Mon, 13 Oct 2014 21:28:19 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:aca8706f4eec |
---|---|
1 using System; | |
2 using System.Collections.Generic; | |
3 using System.ComponentModel; | |
4 using System.Data; | |
5 using System.Drawing; | |
6 using System.Drawing.Imaging; | |
7 using System.IO; | |
8 using System.Runtime.InteropServices; | |
9 using System.Text; | |
10 using System.Windows.Forms; | |
11 using ZXing; | |
12 using Microsoft.Win32; | |
13 | |
14 /* | |
15 * Copyright (c) 2014 Brad Greco <brad@bgreco.net> | |
16 */ | |
17 namespace QuickQR | |
18 { | |
19 public partial class QRForm : Form | |
20 { | |
21 const int WM_HOTKEY = 786; | |
22 | |
23 private BarcodeWriter writer; | |
24 private KeyBinding keyBinding; | |
25 private String currentText; | |
26 private Settings settings; | |
27 | |
28 [DllImport("user32.dll")] | |
29 private static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk); | |
30 [DllImport("user32.dll")] | |
31 private static extern int UnregisterHotKey(IntPtr hwnd, int id); | |
32 | |
33 public QRForm() | |
34 { | |
35 InitializeComponent(); | |
36 } | |
37 | |
38 private void QRForm_Load(object sender, EventArgs e) | |
39 { | |
40 settings = new Settings(); | |
41 loadSettings(); | |
42 registerHotkey(keyBinding); | |
43 writer = new BarcodeWriter { Format = BarcodeFormat.QR_CODE }; | |
44 writer.Options.Margin = 2; | |
45 fileHide.ShortcutKeyDisplayString = "Esc"; | |
46 reset(); | |
47 notifyIcon.Icon = new System.Drawing.Icon(this.Icon, 16, 16); | |
48 } | |
49 | |
50 private void notifyIcon_DoubleClick(object sender, EventArgs e) | |
51 { | |
52 this.Show(); | |
53 this.Activate(); | |
54 generateFromClipboard(); | |
55 } | |
56 | |
57 private void generateFromClipboard() | |
58 { | |
59 if (Clipboard.ContainsText()) | |
60 { | |
61 inputTextBox.Text = Clipboard.GetText(); | |
62 generate(Clipboard.GetText()); | |
63 } | |
64 else | |
65 { | |
66 reset(); | |
67 } | |
68 } | |
69 | |
70 private void generateFromTextBox() | |
71 { | |
72 if (inputTextBox.Text.Length > 0) | |
73 generate(inputTextBox.Text); | |
74 else | |
75 reset(); | |
76 } | |
77 | |
78 private void generate(String text) | |
79 { | |
80 System.Diagnostics.Debug.WriteLine("Generating: " + text); | |
81 currentText = text; | |
82 draw(); | |
83 } | |
84 | |
85 private void draw() | |
86 { | |
87 writer.Options.Width = QRImage.Width; | |
88 writer.Options.Height = QRImage.Height; | |
89 try | |
90 { | |
91 QRImage.Image = writer.Write(currentText); | |
92 } | |
93 catch (Exception e) | |
94 { | |
95 System.Diagnostics.Debug.WriteLine(e.Message); | |
96 showError(e.Message); | |
97 return; | |
98 } | |
99 finally | |
100 { | |
101 inputTextBox.SelectAll(); | |
102 inputTextBox.Focus(); | |
103 } | |
104 if (QRLabel.ForeColor != Color.Black) | |
105 QRLabel.ForeColor = Color.Black; | |
106 QRLabel.Text = currentText; | |
107 fileSaveAs.Enabled = true; | |
108 QRImage.ContextMenuStrip = imageMenu; | |
109 } | |
110 | |
111 private void registerHotkey(KeyBinding hotkey) | |
112 { | |
113 settings.setHotkey(hotkey); | |
114 unregisterHotkey(); | |
115 if (hotkey.key > 0) | |
116 RegisterHotKey(this.Handle, hotkey.getID(), hotkey.sum(), hotkey.key); | |
117 keyBinding = hotkey; | |
118 } | |
119 | |
120 private void unregisterHotkey() | |
121 { | |
122 if (keyBinding.key > 0) | |
123 UnregisterHotKey(this.Handle, keyBinding.getID()); | |
124 } | |
125 | |
126 private void showHotkeyForm() | |
127 { | |
128 unregisterHotkey(); | |
129 SetHotkey form = new SetHotkey(keyBinding); | |
130 if (form.ShowDialog() == DialogResult.OK) | |
131 registerHotkey(form.keyBinding); | |
132 form.Dispose(); | |
133 } | |
134 | |
135 private void loadSettings() | |
136 { | |
137 optionWinStart.Checked = menuAutorun.Checked = settings.autostart; | |
138 optionBackground.Checked = settings.background; | |
139 keyBinding = new KeyBinding(settings.hotkey); | |
140 registerAutostart(); | |
141 } | |
142 | |
143 private void registerAutostart() | |
144 { | |
145 RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); | |
146 if (settings.autostart) | |
147 key.SetValue("QuickQR", Application.ExecutablePath.ToString()); | |
148 else | |
149 key.DeleteValue("QuickQR", false); | |
150 } | |
151 | |
152 private void showError(String message) | |
153 { | |
154 QRLabel.ForeColor = Color.Red; | |
155 QRLabel.Text = message; | |
156 } | |
157 | |
158 private void reset() | |
159 { | |
160 inputTextBox.Text = string.Empty; | |
161 QRImage.Image = null; | |
162 QRLabel.Text = String.Empty; | |
163 inputTextBox.Focus(); | |
164 currentText = string.Empty; | |
165 fileSaveAs.Enabled = false; | |
166 QRImage.ContextMenuStrip = null; | |
167 } | |
168 | |
169 private void toggleBackground() | |
170 { | |
171 settings.setBackground(!settings.background); | |
172 optionBackground.Checked = settings.background; | |
173 } | |
174 | |
175 private void toggleAutorun() | |
176 { | |
177 settings.setAutostart(!settings.autostart); | |
178 optionWinStart.Checked = menuAutorun.Checked = settings.autostart; | |
179 registerAutostart(); | |
180 } | |
181 | |
182 private void saveImage() | |
183 { | |
184 SaveFileDialog dialog = new SaveFileDialog(); | |
185 dialog.DefaultExt = "png"; | |
186 dialog.Filter = "PNG images (*.png)|*.png|All files (*.*)|*.*"; | |
187 String fileName = currentText; | |
188 foreach (char c in Path.GetInvalidFileNameChars()) | |
189 { | |
190 fileName = fileName.Replace(c.ToString(), ""); | |
191 } | |
192 dialog.FileName = fileName; | |
193 if (dialog.ShowDialog() == DialogResult.OK) | |
194 { | |
195 QRImage.Image.Save(dialog.FileName, ImageFormat.Png); | |
196 } | |
197 dialog.Dispose(); | |
198 } | |
199 | |
200 [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] | |
201 protected override void WndProc(ref Message m) | |
202 { | |
203 // Listen for operating system messages. | |
204 switch (m.Msg) | |
205 { | |
206 case WM_HOTKEY: | |
207 System.Diagnostics.Debug.WriteLine(m.WParam.ToString()); | |
208 if (m.WParam.ToInt32() == keyBinding.getID()) | |
209 { | |
210 System.Diagnostics.Debug.WriteLine("Our hotkey received"); | |
211 this.Show(); | |
212 this.Activate(); | |
213 generateFromClipboard(); | |
214 } | |
215 break; | |
216 } | |
217 base.WndProc(ref m); | |
218 } | |
219 | |
220 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) | |
221 { | |
222 if (keyData == Keys.Escape) | |
223 { | |
224 if (settings.background) | |
225 this.Hide(); | |
226 else | |
227 Application.Exit(); | |
228 return true; | |
229 } | |
230 return base.ProcessCmdKey(ref msg, keyData); | |
231 } | |
232 | |
233 private void QRForm_Resize(object sender, EventArgs e) | |
234 { | |
235 if (currentText != string.Empty) | |
236 draw(); | |
237 } | |
238 | |
239 private void inputTextBox_KeyDown(object sender, KeyEventArgs e) | |
240 { | |
241 if (e.KeyCode == Keys.Enter) | |
242 generateFromTextBox(); | |
243 } | |
244 | |
245 private void generateButton_Click(object sender, EventArgs e) | |
246 { | |
247 generateFromTextBox(); | |
248 } | |
249 | |
250 private void fileHide_Click(object sender, EventArgs e) | |
251 { | |
252 this.Hide(); | |
253 } | |
254 | |
255 private void fileExit_Click(object sender, EventArgs e) | |
256 { | |
257 Application.Exit(); | |
258 } | |
259 | |
260 private void menuGenerateClipboard_Click(object sender, EventArgs e) | |
261 { | |
262 this.Show(); | |
263 generateFromClipboard(); | |
264 } | |
265 | |
266 private void menuNew_Click(object sender, EventArgs e) | |
267 { | |
268 this.Show(); | |
269 reset(); | |
270 } | |
271 | |
272 private void exitToolStripMenuItem_Click(object sender, EventArgs e) | |
273 { | |
274 Application.Exit(); | |
275 } | |
276 | |
277 private void QRForm_FormClosing(object sender, FormClosingEventArgs e) | |
278 { | |
279 System.Diagnostics.Debug.WriteLine("Reason: " + e.CloseReason); | |
280 if (settings.background && (e.CloseReason == CloseReason.None || e.CloseReason == CloseReason.UserClosing)) | |
281 { | |
282 this.Hide(); | |
283 e.Cancel = true; | |
284 } | |
285 } | |
286 | |
287 private void optionHotkey_Click(object sender, EventArgs e) | |
288 { | |
289 showHotkeyForm(); | |
290 } | |
291 | |
292 private void menuAutorun_Click(object sender, EventArgs e) | |
293 { | |
294 toggleAutorun(); | |
295 } | |
296 | |
297 private void menuHotkey_Click(object sender, EventArgs e) | |
298 { | |
299 showHotkeyForm(); | |
300 } | |
301 | |
302 private void optionWinStart_Click(object sender, EventArgs e) | |
303 { | |
304 toggleAutorun(); | |
305 } | |
306 | |
307 private void optionBackground_Click(object sender, EventArgs e) | |
308 { | |
309 toggleBackground(); | |
310 } | |
311 | |
312 private void imageCopy_Click(object sender, EventArgs e) | |
313 { | |
314 Clipboard.SetImage(QRImage.Image); | |
315 } | |
316 | |
317 private void fileSaveAs_Click(object sender, EventArgs e) | |
318 { | |
319 saveImage(); | |
320 } | |
321 | |
322 private void imageSaveAs_Click(object sender, EventArgs e) | |
323 { | |
324 saveImage(); | |
325 } | |
326 | |
327 private void helpAbout_Click(object sender, EventArgs e) | |
328 { | |
329 AboutForm form = new AboutForm(); | |
330 form.ShowDialog(); | |
331 form.Dispose(); | |
332 } | |
333 } | |
334 } |