Mercurial > quickqr
view 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 |
line wrap: on
line source
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; using ZXing; using Microsoft.Win32; /* * Copyright (c) 2014 Brad Greco <brad@bgreco.net> */ namespace QuickQR { public partial class QRForm : Form { const int WM_HOTKEY = 786; private BarcodeWriter writer; private KeyBinding keyBinding; private String currentText; private Settings settings; [DllImport("user32.dll")] private static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk); [DllImport("user32.dll")] private static extern int UnregisterHotKey(IntPtr hwnd, int id); public QRForm() { InitializeComponent(); } private void QRForm_Load(object sender, EventArgs e) { settings = new Settings(); loadSettings(); registerHotkey(keyBinding); writer = new BarcodeWriter { Format = BarcodeFormat.QR_CODE }; writer.Options.Margin = 2; fileHide.ShortcutKeyDisplayString = "Esc"; reset(); notifyIcon.Icon = new System.Drawing.Icon(this.Icon, 16, 16); } private void notifyIcon_DoubleClick(object sender, EventArgs e) { this.Show(); this.Activate(); generateFromClipboard(); } private void generateFromClipboard() { if (Clipboard.ContainsText()) { inputTextBox.Text = Clipboard.GetText(); generate(Clipboard.GetText()); } else { reset(); } } private void generateFromTextBox() { if (inputTextBox.Text.Length > 0) generate(inputTextBox.Text); else reset(); } private void generate(String text) { System.Diagnostics.Debug.WriteLine("Generating: " + text); currentText = text; draw(); } private void draw() { writer.Options.Width = QRImage.Width; writer.Options.Height = QRImage.Height; try { QRImage.Image = writer.Write(currentText); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); showError(e.Message); return; } finally { inputTextBox.SelectAll(); inputTextBox.Focus(); } if (QRLabel.ForeColor != Color.Black) QRLabel.ForeColor = Color.Black; QRLabel.Text = currentText; fileSaveAs.Enabled = true; QRImage.ContextMenuStrip = imageMenu; } private void registerHotkey(KeyBinding hotkey) { settings.setHotkey(hotkey); unregisterHotkey(); if (hotkey.key > 0) RegisterHotKey(this.Handle, hotkey.getID(), hotkey.sum(), hotkey.key); keyBinding = hotkey; } private void unregisterHotkey() { if (keyBinding.key > 0) UnregisterHotKey(this.Handle, keyBinding.getID()); } private void showHotkeyForm() { unregisterHotkey(); SetHotkey form = new SetHotkey(keyBinding); if (form.ShowDialog() == DialogResult.OK) registerHotkey(form.keyBinding); form.Dispose(); } private void loadSettings() { optionWinStart.Checked = menuAutorun.Checked = settings.autostart; optionBackground.Checked = settings.background; keyBinding = new KeyBinding(settings.hotkey); registerAutostart(); } private void registerAutostart() { RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); if (settings.autostart) key.SetValue("QuickQR", Application.ExecutablePath.ToString()); else key.DeleteValue("QuickQR", false); } private void showError(String message) { QRLabel.ForeColor = Color.Red; QRLabel.Text = message; } private void reset() { inputTextBox.Text = string.Empty; QRImage.Image = null; QRLabel.Text = String.Empty; inputTextBox.Focus(); currentText = string.Empty; fileSaveAs.Enabled = false; QRImage.ContextMenuStrip = null; } private void toggleBackground() { settings.setBackground(!settings.background); optionBackground.Checked = settings.background; } private void toggleAutorun() { settings.setAutostart(!settings.autostart); optionWinStart.Checked = menuAutorun.Checked = settings.autostart; registerAutostart(); } private void saveImage() { SaveFileDialog dialog = new SaveFileDialog(); dialog.DefaultExt = "png"; dialog.Filter = "PNG images (*.png)|*.png|All files (*.*)|*.*"; String fileName = currentText; foreach (char c in Path.GetInvalidFileNameChars()) { fileName = fileName.Replace(c.ToString(), ""); } dialog.FileName = fileName; if (dialog.ShowDialog() == DialogResult.OK) { QRImage.Image.Save(dialog.FileName, ImageFormat.Png); } dialog.Dispose(); } [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] protected override void WndProc(ref Message m) { // Listen for operating system messages. switch (m.Msg) { case WM_HOTKEY: System.Diagnostics.Debug.WriteLine(m.WParam.ToString()); if (m.WParam.ToInt32() == keyBinding.getID()) { System.Diagnostics.Debug.WriteLine("Our hotkey received"); this.Show(); this.Activate(); generateFromClipboard(); } break; } base.WndProc(ref m); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.Escape) { if (settings.background) this.Hide(); else Application.Exit(); return true; } return base.ProcessCmdKey(ref msg, keyData); } private void QRForm_Resize(object sender, EventArgs e) { if (currentText != string.Empty) draw(); } private void inputTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) generateFromTextBox(); } private void generateButton_Click(object sender, EventArgs e) { generateFromTextBox(); } private void fileHide_Click(object sender, EventArgs e) { this.Hide(); } private void fileExit_Click(object sender, EventArgs e) { Application.Exit(); } private void menuGenerateClipboard_Click(object sender, EventArgs e) { this.Show(); generateFromClipboard(); } private void menuNew_Click(object sender, EventArgs e) { this.Show(); reset(); } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } private void QRForm_FormClosing(object sender, FormClosingEventArgs e) { System.Diagnostics.Debug.WriteLine("Reason: " + e.CloseReason); if (settings.background && (e.CloseReason == CloseReason.None || e.CloseReason == CloseReason.UserClosing)) { this.Hide(); e.Cancel = true; } } private void optionHotkey_Click(object sender, EventArgs e) { showHotkeyForm(); } private void menuAutorun_Click(object sender, EventArgs e) { toggleAutorun(); } private void menuHotkey_Click(object sender, EventArgs e) { showHotkeyForm(); } private void optionWinStart_Click(object sender, EventArgs e) { toggleAutorun(); } private void optionBackground_Click(object sender, EventArgs e) { toggleBackground(); } private void imageCopy_Click(object sender, EventArgs e) { Clipboard.SetImage(QRImage.Image); } private void fileSaveAs_Click(object sender, EventArgs e) { saveImage(); } private void imageSaveAs_Click(object sender, EventArgs e) { saveImage(); } private void helpAbout_Click(object sender, EventArgs e) { AboutForm form = new AboutForm(); form.ShowDialog(); form.Dispose(); } } }