Browse Source

Added support for mouse commands

Scott Brogden 9 years ago
parent
commit
ca419d63ca
8 changed files with 431 additions and 59 deletions
  1. 9 3
      ActionEnums.cpp
  2. 27 18
      CP_Main.rc
  3. 20 2
      HotKeys.cpp
  4. 5 0
      Misc.h
  5. 48 9
      QPasteWnd.cpp
  6. 296 26
      QuickPasteKeyboard.cpp
  7. 9 0
      QuickPasteKeyboard.h
  8. 17 1
      Resource.h

+ 9 - 3
ActionEnums.cpp

@@ -1,6 +1,7 @@
 #include "stdafx.h"
 #include "ActionEnums.h"
 #include "Accels.h"
+#include "Misc.h"
 
 ActionEnums::ActionEnums()
 {
@@ -115,6 +116,8 @@ CString ActionEnums::EnumDescription(ActionEnumValues value)
 	case PASTE_TYPOGLYCEMIA:
 		return "PASTE_TYPOGLYCEMIA";
 	}
+
+	return "";
 }
 
 int ActionEnums::GetDefaultShortCutKeyA(ActionEnumValues value, int pos)
@@ -161,6 +164,8 @@ int ActionEnums::GetDefaultShortCutKeyA(ActionEnumValues value, int pos)
 			return VK_UP;
 		case ActionEnums::NEXTDESCRIPTION:
 			return VK_DOWN;
+		case ActionEnums::PASTE_SELECTED:
+			return VK_MOUSE_DOUBLE_CLICK;
 		}
 		break;
 	}
@@ -173,9 +178,10 @@ int ActionEnums::GetDefaultShortCutKeyB(ActionEnumValues value, int pos)
 	switch (pos)
 	{
 	case 0:
-		switch (value)
-		{
-		}
+		//switch (value)
+		//{
+		//}
+		break;
 	}
 
 	return -1;

+ 27 - 18
CP_Main.rc

@@ -892,27 +892,36 @@ BEGIN
     LTEXT           "Count",IDC_STATIC_SELECTED_COUNT,259,300,39,8
 END
 
-IDD_OPTIONS_QUICK_PASTE_KEYBOARD DIALOGEX 0, 0, 375, 272
+IDD_OPTIONS_QUICK_PASTE_KEYBOARD DIALOGEX 0, 0, 375, 287
 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION " "
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    CONTROL         "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,361,115
-    CONTROL         "",IDC_HOTKEY1,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,25,183,80,14
-    PUSHBUTTON      "Assign",IDC_ASSIGN,318,251,50,14
-    CONTROL         "",IDC_HOTKEY2,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,202,185,80,14
-    CONTROL         "Keyboard Shortcut",IDC_RADIO_KEYBOARD,"Button",BS_AUTORADIOBUTTON | WS_GROUP,18,170,76,10
-    CONTROL         "Mouse Click",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,18,207,53,10
-    COMBOBOX        IDC_COMBO_ALL_ASSIGNED,8,139,253,99,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Remove",IDC_BUTTON_REMOVE,265,138,50,14
-    PUSHBUTTON      "Add",IDC_BUTTON_ADD,318,138,50,14
-    LTEXT           "Shortcuts for selected command:",IDC_STATIC,8,128,106,8
-    GROUPBOX        "First Keypress",IDC_STATIC,7,157,151,93
-    CONTROL         "Keyboard Shortcut",IDC_RADIO_KEYBOARD2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,183,171,76,10
-    CONTROL         "Mouse Click",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,183,209,53,10
-    GROUPBOX        "Second Keypress",IDC_STATIC,172,158,168,93
-    PUSHBUTTON      "Enter Key",IDC_BUTTON_ENTER,109,183,44,14
-    PUSHBUTTON      "Enter Key",IDC_BUTTON_ENTER2,286,185,44,14
+    CONTROL         "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,23,361,144
+    CONTROL         "",IDC_HOTKEY1,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,25,225,80,14
+    PUSHBUTTON      "Assign",IDC_ASSIGN,318,266,50,14
+    CONTROL         "",IDC_HOTKEY2,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,195,225,80,14
+    CONTROL         "Keyboard Shortcut",IDC_RADIO_KEYBOARD_1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,211,76,10
+    CONTROL         "Mouse Click",IDC_RADIO_MOUSE_1,"Button",BS_AUTORADIOBUTTON,99,211,53,10
+    COMBOBOX        IDC_COMBO_ALL_ASSIGNED,8,180,253,99,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    PUSHBUTTON      "Remove",IDC_BUTTON_REMOVE,265,179,50,14
+    PUSHBUTTON      "Add",IDC_BUTTON_ADD,318,179,50,14
+    LTEXT           "Shortcuts for selected command:",IDC_STATIC,8,169,106,8
+    GROUPBOX        "First Keypress",IDC_STATIC,7,198,151,65
+    CONTROL         "Keyboard Shortcut",IDC_RADIO_KEYBOARD_2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,183,211,76,10
+    CONTROL         "Mouse Click",IDC_RADIO_MOUSE_2,"Button",BS_AUTORADIOBUTTON,263,211,53,10
+    GROUPBOX        "Second Keypress",IDC_STATIC,172,199,168,64
+    PUSHBUTTON      "Enter Key",IDC_BUTTON_ENTER,109,225,44,14
+    PUSHBUTTON      "Enter Key",IDC_BUTTON_ENTER2,282,225,44,14
+    COMBOBOX        IDC_MOUSE_1,25,226,68,49,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Shift",IDC_CHECK_SHIFT_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,242,31,10
+    CONTROL         "Control",IDC_CHECK_CONTROL_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,61,242,39,10
+    CONTROL         "Alt",IDC_CHECK_ALT_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,105,242,25,10
+    COMBOBOX        IDC_MOUSE_2,195,226,68,49,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Shift",IDC_CHECK_SHIFT_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,243,31,10
+    CONTROL         "Control",IDC_CHECK_CONTROL_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,243,39,10
+    CONTROL         "Alt",IDC_CHECK_ALT_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,275,243,25,10
+    PUSHBUTTON      "Reset",IDC_BUTTON_RESET,318,7,50,14
 END
 
 
@@ -1115,7 +1124,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 368
         TOPMARGIN, 7
-        BOTTOMMARGIN, 265
+        BOTTOMMARGIN, 280
     END
 END
 #endif    // APSTUDIO_INVOKED

+ 20 - 2
HotKeys.cpp

@@ -35,6 +35,7 @@ CString CHotKey::GetHotKeyDisplay()
 
 CString CHotKey::GetHotKeyDisplayStatic(DWORD dwHotKey)
 {
+	WORD vk = LOBYTE(dwHotKey);
 	CString keyDisplay;
 	UINT modifiers = GetModifier(HIBYTE(dwHotKey));
 	if(modifiers & MOD_SHIFT)
@@ -57,7 +58,24 @@ CString CHotKey::GetHotKeyDisplayStatic(DWORD dwHotKey)
 		keyDisplay += _T("Win + ");
 	}
 
-	keyDisplay += GetVirKeyName(LOBYTE(dwHotKey));
+	switch (vk)
+	{
+	case VK_MOUSE_CLICK:
+		keyDisplay += "Click";
+		break;
+	case VK_MOUSE_DOUBLE_CLICK:
+		keyDisplay += "Double Click";
+		break;
+	case VK_MOUSE_RIGHT_CLICK:
+		keyDisplay += "Right Click";
+		break;
+	case VK_MOUSE_MIDDLE_CLICK:
+		keyDisplay += "Middle Click";
+		break;
+	default:
+		keyDisplay += GetVirKeyName(vk);
+		break;
+	}	
 
 	return keyDisplay;
 }
@@ -181,7 +199,7 @@ void CHotKey::CopyToCtrl(CHotKeyCtrl& ctrl, HWND hParent, int nWindowsCBID)
 	long lModifiers = HIBYTE(m_Key);
 	long keys = LOBYTE(m_Key);
 
-	ctrl.SetHotKey(keys, (WORD)lModifiers & ~HOTKEYF_EXT); 
+	ctrl.SetHotKey((WORD)keys, (WORD)lModifiers & ~HOTKEYF_EXT); 
 
 	if(lModifiers & HOTKEYF_EXT)
 	{

+ 5 - 0
Misc.h

@@ -8,6 +8,11 @@
 
 #include "Shared/ArrayEx.h"
 
+#define VK_MOUSE_CLICK 0x01
+#define VK_MOUSE_DOUBLE_CLICK 0x02
+#define VK_MOUSE_RIGHT_CLICK 0x03
+#define VK_MOUSE_MIDDLE_CLICK 0x04
+
 
 //Handle foreign keyboards pressing ALT_GR (right alt), this simulates a control press
 //http://compgroups.net/comp.os.programmer.win32/alt-gr-key-and-left-ctrl/2840252

+ 48 - 9
QPasteWnd.cpp

@@ -959,7 +959,7 @@ LRESULT CQPasteWnd::OnListSelect_Index(WPARAM wParam, LPARAM lParam)
 
 LRESULT CQPasteWnd::OnListDblClick(WPARAM wParam, LPARAM lParam)
 {
-	DoAction(ActionEnums::PASTE_SELECTED);
+	//DoAction(ActionEnums::PASTE_SELECTED);
     return TRUE;
 }
 
@@ -2630,11 +2630,26 @@ void CQPasteWnd::SetKeyModiferState(bool bActive)
 
 BOOL CQPasteWnd::PreTranslateMessage(MSG *pMsg)
 {
-	if (CheckActions(pMsg))
+	switch (pMsg->message)
 	{
-		return TRUE;
+	case WM_MBUTTONUP:
+		MSG msg;
+		msg.lParam = 0;
+		msg.wParam = VK_MOUSE_MIDDLE_CLICK;
+		msg.message = WM_KEYDOWN;
+		if (CheckActions(&msg) == false)
+		{
+		}
+		break;
+	case WM_MBUTTONDBLCLK:
+		break;
+	default:
+		if (CheckActions(pMsg))
+		{
+			return TRUE;
+		}
+		break;
 	}
-
     return CWndEx::PreTranslateMessage(pMsg);
 }
 
@@ -5533,7 +5548,13 @@ void CQPasteWnd::OnUpdateSpecialpasteTypoglycemia(CCmdUI *pCmdUI)
 void CQPasteWnd::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
 {
 	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
-	//DoAction(ActionEnums::PASTE_SELECTED);
+	MSG msg;
+	msg.lParam = 0;
+	msg.wParam = VK_MOUSE_CLICK;
+	msg.message = WM_KEYDOWN;
+	if (CheckActions(&msg) == false)
+	{
+	}
 	*pResult = 0;
 }
 
@@ -5542,8 +5563,14 @@ void CQPasteWnd::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
 {
 	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
 	
-	DoAction(ActionEnums::PASTE_SELECTED);
-
+	MSG msg;
+	msg.lParam = 0;
+	msg.wParam = VK_MOUSE_DOUBLE_CLICK;
+	msg.message = WM_KEYDOWN;
+	if (CheckActions(&msg) == false)
+	{
+	}
+	
 	*pResult = 0;
 }
 
@@ -5551,13 +5578,25 @@ void CQPasteWnd::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
 void CQPasteWnd::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult)
 {
 	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
-	DoAction(ActionEnums::SHOWMENU);
+	MSG msg;
+	msg.lParam = 0;
+	msg.wParam = VK_MOUSE_RIGHT_CLICK;
+	msg.message = WM_KEYDOWN;
+	if (CheckActions(&msg) == false)
+	{
+	}
 	*pResult = 0;
 }
 
 void CQPasteWnd::OnNMRDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
 {
 	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
-	// TODO: Add your control notification handler code here
+	/*MSG msg;
+	msg.lParam = 0;
+	msg.wParam = VK_MOUSE_RIGHT_CLICK;
+	msg.message = WM_KEYDOWN;
+	if (CheckActions(&msg) == false)
+	{
+	}*/
 	*pResult = 0;
 }

+ 296 - 26
QuickPasteKeyboard.cpp

@@ -31,6 +31,8 @@ void CQuickPasteKeyboard::DoDataExchange(CDataExchange* pDX)
 	DDX_Control(pDX, IDC_HOTKEY1, m_hotKey1);
 	DDX_Control(pDX, IDC_HOTKEY2, m_hotKey2);
 	DDX_Control(pDX, IDC_COMBO_ALL_ASSIGNED, m_assignedCombo);
+	DDX_Control(pDX, IDC_MOUSE_1, m_mouseType1);
+	DDX_Control(pDX, IDC_MOUSE_2, m_mouseType2);
 }
 
 
@@ -47,6 +49,11 @@ BEGIN_MESSAGE_MAP(CQuickPasteKeyboard, CPropertyPage)
 	ON_BN_CLICKED(IDC_BUTTON_ENTER, &CQuickPasteKeyboard::OnBnClickedButtonEnter)
 	ON_BN_CLICKED(IDC_BUTTON_ENTER2, &CQuickPasteKeyboard::OnBnClickedButtonEnter2)
 	ON_WM_KEYUP()
+	ON_BN_CLICKED(IDC_BUTTON_RESET, &CQuickPasteKeyboard::OnBnClickedButtonReset)
+	ON_BN_CLICKED(IDC_RADIO_KEYBOARD_1, &CQuickPasteKeyboard::OnBnClickedRadioKeyboard1)
+	ON_BN_CLICKED(IDC_RADIO_MOUSE_1, &CQuickPasteKeyboard::OnBnClickedRadioMouse1)
+	ON_BN_CLICKED(IDC_RADIO_KEYBOARD_2, &CQuickPasteKeyboard::OnBnClickedRadioKeyboard2)
+	ON_BN_CLICKED(IDC_RADIO_MOUSE_2, &CQuickPasteKeyboard::OnBnClickedRadioMouse2)
 END_MESSAGE_MAP()
 
 
@@ -60,6 +67,33 @@ BOOL CQuickPasteKeyboard::OnInitDialog()
 	InitListCtrlCols();
 	LoadItems();
 
+	int pos = m_mouseType1.AddString(_T("Click"));
+	m_mouseType1.SetItemData(pos, VK_MOUSE_CLICK);
+
+	pos = m_mouseType1.AddString(_T("Double Click"));
+	m_mouseType1.SetItemData(pos, VK_MOUSE_DOUBLE_CLICK);
+
+	pos = m_mouseType1.AddString(_T("Right Click"));
+	m_mouseType1.SetItemData(pos, VK_MOUSE_RIGHT_CLICK);
+
+	pos = m_mouseType1.AddString(_T("Middle Click"));
+	m_mouseType1.SetItemData(pos, VK_MOUSE_MIDDLE_CLICK);
+
+	pos = m_mouseType2.AddString(_T("Click"));
+	m_mouseType2.SetItemData(pos, VK_MOUSE_CLICK);
+
+	pos = m_mouseType2.AddString(_T("Double Click"));
+	m_mouseType2.SetItemData(pos, VK_MOUSE_DOUBLE_CLICK);
+
+	pos = m_mouseType2.AddString(_T("Right Click"));
+	m_mouseType2.SetItemData(pos, VK_MOUSE_RIGHT_CLICK);
+
+	pos = m_mouseType2.AddString(_T("Middle Click"));
+	m_mouseType2.SetItemData(pos, VK_MOUSE_MIDDLE_CLICK);
+
+	m_mouseType1.SetCurSel(0);
+	m_mouseType2.SetCurSel(0);
+
 	SetWindowText(_T("Quick Paste Shortcuts"));
 
 	return TRUE;  // return TRUE unless you set the focus to a control
@@ -233,9 +267,55 @@ void CQuickPasteKeyboard::OnBnClickedAssign()
 	{
 		m_map[id].Array[shortCutId].Dirty = true;
 
-		//remove the extended key flag, don't think this is needed now days
-		m_map[id].Array[shortCutId].A = ACCEL_MAKEKEY(LOBYTE(m_hotKey1.GetHotKey()), (HIBYTE(m_hotKey1.GetHotKey()) & ~HOTKEYF_EXT));
-		m_map[id].Array[shortCutId].B = ACCEL_MAKEKEY(LOBYTE(m_hotKey2.GetHotKey()), HIBYTE(m_hotKey2.GetHotKey()) & ~HOTKEYF_EXT);		
+		if (this->IsDlgButtonChecked(IDC_RADIO_KEYBOARD_1) == BST_CHECKED)
+		{
+			//remove the extended key flag, don't think this is needed now days
+			m_map[id].Array[shortCutId].A = ACCEL_MAKEKEY(LOBYTE(m_hotKey1.GetHotKey()), (HIBYTE(m_hotKey1.GetHotKey()) & ~HOTKEYF_EXT));
+		}
+		else if (this->IsDlgButtonChecked(IDC_RADIO_MOUSE_1) == BST_CHECKED)
+		{
+			WORD vk = (WORD)m_mouseType1.GetItemData(m_mouseType1.GetCurSel());
+			WORD mod = 0;
+			if (this->IsDlgButtonChecked(IDC_CHECK_SHIFT_1) == BST_CHECKED)
+			{
+				mod |= HOTKEYF_SHIFT;
+			}
+			if (this->IsDlgButtonChecked(IDC_CHECK_CONTROL_1) == BST_CHECKED)
+			{ 
+				mod |= HOTKEYF_CONTROL;
+			}
+			if (this->IsDlgButtonChecked(IDC_CHECK_ALT_1) == BST_CHECKED)
+			{
+				mod |= HOTKEYF_ALT;
+			}
+
+			m_map[id].Array[shortCutId].A = ACCEL_MAKEKEY(vk, mod);
+		}
+
+		if (this->IsDlgButtonChecked(IDC_RADIO_KEYBOARD_2) == BST_CHECKED)
+		{
+			//remove the extended key flag, don't think this is needed now days
+			m_map[id].Array[shortCutId].B = ACCEL_MAKEKEY(LOBYTE(m_hotKey2.GetHotKey()), (HIBYTE(m_hotKey2.GetHotKey()) & ~HOTKEYF_EXT));
+		}
+		else if (this->IsDlgButtonChecked(IDC_RADIO_MOUSE_2) == BST_CHECKED)
+		{
+			WORD vk = (WORD)m_mouseType2.GetItemData(m_mouseType2.GetCurSel());
+			WORD mod = 0;
+			if (this->IsDlgButtonChecked(IDC_CHECK_SHIFT_2) == BST_CHECKED)
+			{
+				mod |= HOTKEYF_SHIFT;
+			}
+			if (this->IsDlgButtonChecked(IDC_CHECK_CONTROL_2) == BST_CHECKED)
+			{
+				mod |= HOTKEYF_CONTROL;
+			}
+			if (this->IsDlgButtonChecked(IDC_CHECK_ALT_2) == BST_CHECKED)
+			{
+				mod |= HOTKEYF_ALT;
+			}
+
+			m_map[id].Array[shortCutId].B = ACCEL_MAKEKEY(vk, mod);
+		}
 
 		CString sh = GetShortCutText(m_map[id]);
 		LVITEM lvi;
@@ -386,6 +466,17 @@ int CQuickPasteKeyboard::SelectedCommandShortCutId()
 
 void CQuickPasteKeyboard::LoadHotKey(KeyboardAB ab)
 {
+	CheckDlgButton(IDC_RADIO_MOUSE_1, BST_UNCHECKED);
+	CheckDlgButton(IDC_RADIO_KEYBOARD_1, BST_UNCHECKED);
+	CheckDlgButton(IDC_CHECK_SHIFT_1, BST_UNCHECKED);
+	CheckDlgButton(IDC_CHECK_CONTROL_1, BST_UNCHECKED);
+	CheckDlgButton(IDC_CHECK_ALT_1, BST_UNCHECKED);
+	CheckDlgButton(IDC_CHECK_SHIFT_2, BST_UNCHECKED);
+	CheckDlgButton(IDC_CHECK_CONTROL_2, BST_UNCHECKED);
+	CheckDlgButton(IDC_CHECK_ALT_2, BST_UNCHECKED);
+	m_hotKey1.SetHotKey(0, 0);
+	m_hotKey2.SetHotKey(0, 0);
+
 	int a = 0;
 	if (ab.A > 0)
 	{
@@ -409,37 +500,112 @@ void CQuickPasteKeyboard::LoadHotKey(KeyboardAB ab)
 				a = ACCEL_MAKEKEY(LOBYTE(a), (HIBYTE(a) | HOTKEYF_EXT));
 				break;
 			}
+			
 		}
-	}
 
-	int b = 0;
-	if (ab.B > 0)
-	{
-		b = ab.B;
-
-		switch (LOBYTE((DWORD)b))
-		{
-		case VK_LEFT:
-		case VK_UP:
-		case VK_RIGHT:
-		case VK_DOWN: // arrow keys
-		case VK_PRIOR:
-		case VK_NEXT: // page up and page down
-		case VK_END:
-		case VK_HOME:
-		case VK_INSERT:
-		case VK_DELETE:
-		case VK_DIVIDE: // numpad slash
-		case VK_NUMLOCK:
+		switch (LOBYTE((DWORD)a))
 		{
-			b = ACCEL_MAKEKEY(LOBYTE(b), (HIBYTE(b) | HOTKEYF_EXT));
+		case VK_MOUSE_CLICK:
+		case VK_MOUSE_DOUBLE_CLICK:
+		case VK_MOUSE_RIGHT_CLICK:
+		case VK_MOUSE_MIDDLE_CLICK:
+			SelectMouseTypeCombo(m_mouseType1, LOBYTE((DWORD)a));
+			CheckDlgButton(IDC_RADIO_MOUSE_1, BST_CHECKED);
+			
+			{
+				BYTE mod = HIBYTE(a);
+				if (mod & HOTKEYF_SHIFT)
+					CheckDlgButton(IDC_CHECK_SHIFT_1, BST_CHECKED);
+				if (mod & HOTKEYF_CONTROL)
+					CheckDlgButton(IDC_CHECK_CONTROL_1, BST_CHECKED);
+				if (mod & HOTKEYF_ALT)
+					CheckDlgButton(IDC_CHECK_ALT_1, BST_CHECKED);
+			}
+
+			break;
+		default:
+			CheckDlgButton(IDC_RADIO_KEYBOARD_1, BST_CHECKED);
+			m_hotKey1.SetHotKey(LOBYTE((DWORD)a), (HIBYTE((DWORD)a)));
 			break;
 		}
+
+		int b = 0;
+		if (ab.B > 0)
+		{
+			b = ab.B;
+
+			switch (LOBYTE((DWORD)b))
+			{
+			case VK_LEFT:
+			case VK_UP:
+			case VK_RIGHT:
+			case VK_DOWN: // arrow keys
+			case VK_PRIOR:
+			case VK_NEXT: // page up and page down
+			case VK_END:
+			case VK_HOME:
+			case VK_INSERT:
+			case VK_DELETE:
+			case VK_DIVIDE: // numpad slash
+			case VK_NUMLOCK:
+			{
+				b = ACCEL_MAKEKEY(LOBYTE(b), (HIBYTE(b) | HOTKEYF_EXT));
+				break;
+			}
+			}
+
+			switch (LOBYTE((DWORD)b))
+			{
+			case VK_MOUSE_CLICK:
+			case VK_MOUSE_DOUBLE_CLICK:
+			case VK_MOUSE_RIGHT_CLICK:
+			case VK_MOUSE_MIDDLE_CLICK:
+				SelectMouseTypeCombo(m_mouseType2, LOBYTE((DWORD)b));
+				CheckDlgButton(IDC_RADIO_MOUSE_2, BST_CHECKED);
+
+				{
+					BYTE mod = HIBYTE(b);
+					if (mod & HOTKEYF_SHIFT)
+						CheckDlgButton(IDC_CHECK_SHIFT_2, BST_CHECKED);
+					if (mod & HOTKEYF_CONTROL)
+						CheckDlgButton(IDC_CHECK_CONTROL_2, BST_CHECKED);
+					if (mod & HOTKEYF_ALT)
+						CheckDlgButton(IDC_CHECK_ALT_2, BST_CHECKED);
+				}
+
+				break;
+			default:
+				CheckDlgButton(IDC_RADIO_KEYBOARD_2, BST_CHECKED);
+				m_hotKey2.SetHotKey(LOBYTE((DWORD)b), (HIBYTE((DWORD)b)));
+				break;
+			}
 		}
+		else
+		{ 
+			CheckDlgButton(IDC_RADIO_KEYBOARD_2, BST_CHECKED);
+		}
+	}
+	else
+	{
+		CheckDlgButton(IDC_RADIO_KEYBOARD_1, BST_CHECKED);
+		CheckDlgButton(IDC_RADIO_KEYBOARD_2, BST_CHECKED);
 	}
 
-	m_hotKey1.SetHotKey(LOBYTE((DWORD)a), (HIBYTE((DWORD)a)));
-	m_hotKey2.SetHotKey(LOBYTE((DWORD)b), (HIBYTE((DWORD)b)));
+	OnBnClickedRadioMouse1();
+}
+
+void CQuickPasteKeyboard::SelectMouseTypeCombo(CComboBox &combo, int value)
+{
+	int count = combo.GetCount();
+	for (int i = 0; i < count; i++)
+	{
+		int itemData = combo.GetItemData(i);
+		if (itemData == value)
+		{
+			combo.SetCurSel(i);
+			break;
+		}
+	}
 }
 
 
@@ -551,3 +717,107 @@ void CQuickPasteKeyboard::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
 
 	CPropertyPage::OnKeyUp(nChar, nRepCnt, nFlags);
 }
+
+
+void CQuickPasteKeyboard::OnBnClickedButtonReset()
+{
+	for (std::map<DWORD, KeyboardArray>::iterator it = m_map.begin(); it != m_map.end(); ++it)
+	{
+		for (int i = 0; i < 10; i++)
+		{
+			int newA = ActionEnums::GetDefaultShortCutKeyA((ActionEnums::ActionEnumValues)it->first, i);
+			int newB = ActionEnums::GetDefaultShortCutKeyB((ActionEnums::ActionEnumValues)it->first, i);
+			if (it->second.Array[i].A != newA ||
+				it->second.Array[i].B != newB)
+			{
+				it->second.Array[i].A = newA;
+				it->second.Array[i].B = newB;
+				it->second.Array[i].Dirty = true;
+
+				CString sh = GetShortCutText(it->second);
+			}
+		}
+	}
+
+	int count = m_list.GetItemCount();
+	for (int row = 0; row < count; row++)
+	{
+		int actionId = m_list.GetItemData(row);
+		
+		CString sh = GetShortCutText(m_map[actionId]);
+
+		LVITEM lvi;
+		lvi.mask = LVIF_TEXT;
+		lvi.iItem = (int)row;
+		lvi.iSubItem = 0;
+		lvi.pszText = (LPTSTR)(LPCTSTR)(sh);
+		m_list.SetItem(&lvi);
+	}
+
+	m_list.SetItemState(0, LVIS_FOCUSED, LVIS_FOCUSED);
+	m_list.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
+	m_list.SetSelectionMark(0);
+	m_list.EnsureVisible(0, FALSE);
+}
+
+
+void CQuickPasteKeyboard::OnBnClickedRadioKeyboard1()
+{
+	OnBnClickedRadioMouse1();
+}
+
+void CQuickPasteKeyboard::OnBnClickedRadioMouse1()
+{
+	if (IsDlgButtonChecked(IDC_RADIO_KEYBOARD_1) == BST_CHECKED)
+	{
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY1), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER), SW_SHOW);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_1), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_1), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_1), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_1), SW_HIDE);
+	}
+	else if (IsDlgButtonChecked(IDC_RADIO_MOUSE_1) == BST_CHECKED)
+	{
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY1), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER), SW_HIDE);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_1), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_1), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_1), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_1), SW_SHOW);
+	}
+
+	if (IsDlgButtonChecked(IDC_RADIO_KEYBOARD_2) == BST_CHECKED)
+	{
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_SHOW);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_HIDE);
+	}
+	else if (IsDlgButtonChecked(IDC_RADIO_MOUSE_2) == BST_CHECKED)
+	{
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_HIDE);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_SHOW);
+	}
+}
+
+
+void CQuickPasteKeyboard::OnBnClickedRadioKeyboard2()
+{
+	OnBnClickedRadioMouse1();
+}
+
+void CQuickPasteKeyboard::OnBnClickedRadioMouse2()
+{
+	OnBnClickedRadioMouse1();
+}

+ 9 - 0
QuickPasteKeyboard.h

@@ -59,6 +59,7 @@ protected:
 	int SelectedCommandId();
 	int SelectedCommandShortCutId();
 	int SelectedCommandRow();
+	void SelectMouseTypeCombo(CComboBox &combo, int value);
 
 public:
 	afx_msg void OnLvnItemActivateList1(NMHDR *pNMHDR, LRESULT *pResult);
@@ -79,5 +80,13 @@ public:
 	virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
 	afx_msg void OnBnClickedButtonEnter();
 	afx_msg void OnBnClickedButtonEnter2();
+
 	afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+	CComboBox m_mouseType1;
+	CComboBox m_mouseType2;
+	afx_msg void OnBnClickedButtonReset();
+	afx_msg void OnBnClickedRadioKeyboard1();
+	afx_msg void OnBnClickedRadioMouse1();
+	afx_msg void OnBnClickedRadioKeyboard2();
+	afx_msg void OnBnClickedRadioMouse2();
 };

+ 17 - 1
Resource.h

@@ -187,9 +187,11 @@
 #define IDC_ENSURE                      1042
 #define IDC_PLAY_SOUND_1                1042
 #define IDC_CHECK_CLIP_TITLE            1042
+#define IDC_CHECK_SHIFT_1               1042
 #define IDC_PLAY_SOUND_2                1043
 #define IDC_CHECK_MOVE_CLIPS_ON_PASTE   1043
 #define IDC_CHECK_CREATE_DATE           1043
+#define IDC_CHECK_SHIFT_2               1043
 #define IDC_PLAY_SOUND_3                1044
 #define IDC_CHECK_LAST_USE_DATE         1044
 #define IDC_CHECK_DATA_FORMAT           1045
@@ -392,6 +394,7 @@
 #define IDC_STATIC_DESC                 2126
 #define IDC_RADIO_USE_IP                2127
 #define IDC_RADIO_KEYBOARD              2127
+#define IDC_RADIO_KEYBOARD_1            2127
 #define IDC_STATIC_REMOTE_FILES         2128
 #define IDC_RADIO2                      2128
 #define IDC_RADIO_ENTER                 2128
@@ -399,14 +402,27 @@
 #define IDC_COMBO_ENTER_MODIFYER        2129
 #define IDC_STATIC_REMOTE_FILE_REQUEST  2130
 #define IDC_RADIO3                      2130
+#define IDC_RADIO_MOUSE                 2130
+#define IDC_RADIO_MOUSE_1               2130
 #define IDC_COMBO_ALL_ASSIGNED          2131
 #define IDC_BUTTON_ADD                  2132
 #define IDC_RADIO_KEYBOARD2             2133
+#define IDC_RADIO_KEYBOARD_2            2133
 #define IDC_RADIO_ENTER2                2134
 #define IDC_COMBO_ENTER_MODIFYER2       2135
 #define IDC_BUTTON_ENTER                2135
 #define IDC_RADIO4                      2136
+#define IDC_RADIO_MOUSE_2               2136
 #define IDC_BUTTON_ENTER2               2137
+#define IDC_MOUSE_A                     2138
+#define IDC_MOUSE_1                     2138
+#define IDC_CHECK_CONTROL_1             2139
+#define IDC_CHECK_ALT_1                 2140
+#define IDC_MOUSE_2                     2141
+#define IDC_CHECK_CONTROL_2             2142
+#define IDC_CHECK_ALT_2                 2143
+#define IDC_BUTTON3                     2144
+#define IDC_BUTTON_RESET                2144
 #define ID_FIRST_OPTION                 32771
 #define ID_FIRST_EXIT                   32772
 #define ID_FIRST_SHOWQUICKPASTE         32773
@@ -558,7 +574,7 @@
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        251
 #define _APS_NEXT_COMMAND_VALUE         32923
-#define _APS_NEXT_CONTROL_VALUE         2136
+#define _APS_NEXT_CONTROL_VALUE         2145
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif