Просмотр исходного кода

Global Clips dialog

git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@576 595ec19a-5cb4-439b-94a8-42fb3063c22c
sabrogden 14 лет назад
Родитель
Сommit
8ea8444b5e
14 измененных файлов с 300 добавлено и 21 удалено
  1. 1 4
      CP_Main.cpp
  2. 18 0
      CP_Main.rc
  3. 2 0
      CP_Main.vcxproj
  4. 9 9
      CP_Main_10.sln
  5. 137 0
      GlobalClips.cpp
  6. 32 0
      GlobalClips.h
  7. 49 6
      HotKeys.cpp
  8. 2 1
      HotKeys.h
  9. 34 1
      MainFrm.cpp
  10. 3 0
      MainFrm.h
  11. 1 0
      Misc.h
  12. 10 0
      SendKeys.cpp
  13. 1 0
      SendKeys.h
  14. 1 0
      StdAfx.h

+ 1 - 4
CP_Main.cpp

@@ -911,10 +911,7 @@ int CCP_MainApp::ShowOptionsDlg()
 		CShowMainFrame Show;
 		COptionsSheet Sheet(_T(""), m_pMainFrame);
 		INT_PTR nRet = Sheet.DoModal();
-		if(nRet == IDOK)
-		{
-			m_pMainFrame->m_quickPaste.ShowQPasteWnd(m_pMainFrame, false, false, TRUE);	
-		}
+		
 		bShowingOptions = false;
 	}
 

+ 18 - 0
CP_Main.rc

@@ -167,6 +167,7 @@ BEGIN
         MENUITEM "Show Quick Paste",            ID_FIRST_SHOWQUICKPASTE
         MENUITEM "Options",                     ID_FIRST_OPTION
         MENUITEM SEPARATOR
+        MENUITEM "Global Hot Keys",             ID_FIRST_GLOBALHOTKEYS
         MENUITEM "Import Clip(s)",              ID_FIRST_IMPORT
         MENUITEM "New Clip",                    ID_FIRST_NEWCLIP
         MENUITEM SEPARATOR
@@ -716,6 +717,15 @@ BEGIN
     GROUPBOX        "Copy Buffer 3",IDC_BUFFER_GROUP_3,7,139,273,61
 END
 
+IDD_GLOBAL_CLIPS DIALOGEX 0, 0, 369, 202
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+CAPTION "Global Hot Keys"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+    PUSHBUTTON      "Close",IDCANCEL,312,181,50,14
+    CONTROL         "",IDC_LIST2,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,355,166
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -894,6 +904,14 @@ BEGIN
         TOPMARGIN, 7
         BOTTOMMARGIN, 243
     END
+
+    IDD_GLOBAL_CLIPS, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 362
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 195
+    END
 END
 #endif    // APSTUDIO_INVOKED
 

+ 2 - 0
CP_Main.vcxproj

@@ -545,6 +545,7 @@
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <ClCompile Include="EventThread.cpp" />
+    <ClCompile Include="GlobalClips.cpp" />
     <ClCompile Include="HotKeys.cpp" />
     <ClCompile Include="MainFrmThread.cpp" />
     <ClCompile Include="MessagePumpThread.cpp" />
@@ -1739,6 +1740,7 @@
     <ClInclude Include="ClipFormatQListCtrl.h" />
     <ClInclude Include="EventThread.h" />
     <ClInclude Include="FormattedTextDraw.h" />
+    <ClInclude Include="GlobalClips.h" />
     <ClInclude Include="GroupStatic.h" />
     <ClInclude Include="HotKeys.h" />
     <ClInclude Include="MainFrmThread.h" />

+ 9 - 9
CP_Main_10.sln

@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CP_Main", "CP_Main.vcxproj", "{D90F6EAF-861C-0A85-1208-EF129A0A92E9}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CP_Main", "CP_Main.vcxproj", "{86BF16D0-77B0-8955-B18E-4F78C3083D5E}"
 	ProjectSection(ProjectDependencies) = postProject
 		{F08A8736-1116-4166-AF88-CF533E41E958} = {F08A8736-1116-4166-AF88-CF533E41E958}
 		{CF8F6379-5340-4494-8E59-2807ADF37B95} = {CF8F6379-5340-4494-8E59-2807ADF37B95}
@@ -21,14 +21,14 @@ Global
 		Release|x64 = Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{D90F6EAF-861C-0A85-1208-EF129A0A92E9}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D90F6EAF-861C-0A85-1208-EF129A0A92E9}.Debug|Win32.Build.0 = Debug|Win32
-		{D90F6EAF-861C-0A85-1208-EF129A0A92E9}.Debug|x64.ActiveCfg = Debug|x64
-		{D90F6EAF-861C-0A85-1208-EF129A0A92E9}.Debug|x64.Build.0 = Debug|x64
-		{D90F6EAF-861C-0A85-1208-EF129A0A92E9}.Release|Win32.ActiveCfg = Release|Win32
-		{D90F6EAF-861C-0A85-1208-EF129A0A92E9}.Release|Win32.Build.0 = Release|Win32
-		{D90F6EAF-861C-0A85-1208-EF129A0A92E9}.Release|x64.ActiveCfg = Release|x64
-		{D90F6EAF-861C-0A85-1208-EF129A0A92E9}.Release|x64.Build.0 = Release|x64
+		{86BF16D0-77B0-8955-B18E-4F78C3083D5E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{86BF16D0-77B0-8955-B18E-4F78C3083D5E}.Debug|Win32.Build.0 = Debug|Win32
+		{86BF16D0-77B0-8955-B18E-4F78C3083D5E}.Debug|x64.ActiveCfg = Debug|x64
+		{86BF16D0-77B0-8955-B18E-4F78C3083D5E}.Debug|x64.Build.0 = Debug|x64
+		{86BF16D0-77B0-8955-B18E-4F78C3083D5E}.Release|Win32.ActiveCfg = Release|Win32
+		{86BF16D0-77B0-8955-B18E-4F78C3083D5E}.Release|Win32.Build.0 = Release|Win32
+		{86BF16D0-77B0-8955-B18E-4F78C3083D5E}.Release|x64.ActiveCfg = Release|x64
+		{86BF16D0-77B0-8955-B18E-4F78C3083D5E}.Release|x64.Build.0 = Release|x64
 		{CF8F6379-5340-4494-8E59-2807ADF37B95}.Debug|Win32.ActiveCfg = Debug|Win32
 		{CF8F6379-5340-4494-8E59-2807ADF37B95}.Debug|Win32.Build.0 = Debug|Win32
 		{CF8F6379-5340-4494-8E59-2807ADF37B95}.Debug|x64.ActiveCfg = Debug|x64

+ 137 - 0
GlobalClips.cpp

@@ -0,0 +1,137 @@
+// GlobalClips.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "CP_Main.h"
+#include "GlobalClips.h"
+#include "afxdialogex.h"
+
+
+// GlobalClips dialog
+
+IMPLEMENT_DYNAMIC(GlobalClips, CDialogEx)
+
+GlobalClips::GlobalClips(CWnd* pParent /*=NULL*/)
+	: CDialogEx(GlobalClips::IDD, pParent)
+{
+
+}
+
+GlobalClips::~GlobalClips()
+{
+}
+
+void GlobalClips::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_LIST2, m_List);
+}
+
+
+BEGIN_MESSAGE_MAP(GlobalClips, CDialogEx)
+	ON_WM_DESTROY()
+	ON_WM_CLOSE()
+	ON_WM_SIZE()
+END_MESSAGE_MAP()
+
+BOOL GlobalClips::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	ModifyStyle(0,WS_SYSMENU);
+
+	
+
+	this->SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), TRUE);
+
+	// 0 in WPARAM is 'small version'
+//	::SendMessage(GetSafeHwnd(), WM_SETICON, 0, (LPARAM)hIcon);
+
+
+	m_Resize.SetParent(m_hWnd);
+	m_Resize.AddControl(IDC_LIST2, DR_SizeHeight | DR_SizeWidth);
+	m_Resize.AddControl(IDCANCEL, DR_MoveTop | DR_MoveLeft);
+
+
+	InitListCtrlCols();
+
+	m_List.DeleteAllItems();
+
+	// Use the LV_ITEM structure to insert the items
+	LVITEM lvi;
+	CString strItem;
+	int count = g_HotKeys.GetCount();
+
+	int row = 0;
+	for (int i = 0; i < count; i++)
+	{
+		CHotKey *pHotKey = g_HotKeys[i];
+
+		if(pHotKey->m_Key <= 0)
+		{
+			continue;
+		}
+
+		// Insert the first item
+		lvi.mask =  LVIF_TEXT;
+		lvi.iItem = row;
+
+		strItem = pHotKey->m_Name;
+
+		lvi.iSubItem = 0;
+		lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
+		m_List.InsertItem(&lvi);
+
+		strItem = pHotKey->GetHotKeyDisplay();
+		m_List.SetItemText(row, 1, strItem);
+
+		strItem = _T("Error");
+		if(pHotKey->IsRegistered())
+		{
+			strItem = _T("Yes");
+		}
+
+		m_List.SetItemText(row, 2, strItem);
+
+		row++;
+	}
+
+	return TRUE;
+}
+
+void GlobalClips::InitListCtrlCols()
+{
+	m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT);
+	
+	m_List.InsertColumn(0, theApp.m_Language.GetString("GlobalKeyDesc", "Description"), LVCFMT_LEFT, 200);
+	m_List.InsertColumn(1, theApp.m_Language.GetString("GlobalKeyHotKey", "Hot Key"), LVCFMT_LEFT, 100);
+	m_List.InsertColumn(2, theApp.m_Language.GetString("GlobalKeyRegistered", "Registered"), LVCFMT_LEFT, 100);
+}
+
+void GlobalClips::SetNotifyWnd(HWND hWnd)
+{
+	m_hWndParent = hWnd;
+}
+
+void GlobalClips::OnDestroy()
+{
+	CDialogEx::OnDestroy();
+
+	
+}
+
+
+void GlobalClips::OnClose()
+{
+	::SendMessage(m_hWndParent, WM_GLOBAL_CLIPS_CLOSED, 0, 0);
+
+	CDialogEx::OnClose();
+}
+
+
+void GlobalClips::OnSize(UINT nType, int cx, int cy)
+{
+	CDialogEx::OnSize(nType, cx, cy);
+
+	m_Resize.MoveControls(CSize(cx, cy));
+}

+ 32 - 0
GlobalClips.h

@@ -0,0 +1,32 @@
+#pragma once
+
+#include "DialogResizer.h"
+// GlobalClips dialog
+
+class GlobalClips : public CDialogEx
+{
+	DECLARE_DYNAMIC(GlobalClips)
+
+public:
+	GlobalClips(CWnd* pParent = NULL);   // standard constructor
+	virtual ~GlobalClips();
+
+// Dialog Data
+	enum { IDD = IDD_GLOBAL_CLIPS };
+
+protected:
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
+	void InitListCtrlCols();
+
+	CDialogResizer m_Resize;
+	CListCtrl	m_List;
+	HWND m_hWndParent;
+	DECLARE_MESSAGE_MAP()
+public:
+	void SetNotifyWnd(HWND hWnd);
+
+	virtual BOOL OnInitDialog();
+	afx_msg void OnDestroy();
+	afx_msg void OnClose();
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+};

+ 49 - 6
HotKeys.cpp

@@ -2,6 +2,7 @@
 #include "HotKeys.h"
 #include "Options.h"
 #include "Misc.h"
+#include "SendKeys.h"
 
 CHotKeys g_HotKeys;
 
@@ -22,6 +23,41 @@ CHotKey::~CHotKey()
 	Unregister();
 }
 
+CString CHotKey::GetHotKeyDisplay()
+{
+	CString keyDisplay;
+	UINT modifiers = GetModifier();
+	if(modifiers & MOD_SHIFT)
+	{
+		keyDisplay += _T("Shift + ");
+	}
+
+	if(modifiers & MOD_CONTROL)
+	{
+		keyDisplay += _T("Ctrl + ");
+	}
+
+	if(modifiers & MOD_ALT)
+	{
+		keyDisplay += _T("Alt + ");
+	}
+
+	if(modifiers & MOD_WIN)
+	{
+		keyDisplay += _T("Win + ");
+	}
+
+	BYTE KeyboardState[256];
+	GetKeyboardState(KeyboardState);
+	WORD CharValue;
+
+	ToAscii(LOBYTE(m_Key), 0, KeyboardState, &CharValue, 0);
+	
+	keyDisplay += (char)CharValue;
+
+	return keyDisplay;
+}
+
 void CHotKey::SetKey( DWORD key, bool bSave )
 {
 	if(m_Key == key)
@@ -97,10 +133,15 @@ void CHotKey::CopyToCtrl(CHotKeyCtrl& ctrl, HWND hParent, int nWindowsCBID)
 UINT CHotKey::GetModifier(DWORD dwHotKey)
 {
 	UINT uMod = 0;
-	if( HIBYTE(dwHotKey) & HOTKEYF_SHIFT )   uMod |= MOD_SHIFT;
-	if( HIBYTE(dwHotKey) & HOTKEYF_CONTROL ) uMod |= MOD_CONTROL;
-	if( HIBYTE(dwHotKey) & HOTKEYF_ALT )     uMod |= MOD_ALT;
-	if( HIBYTE(dwHotKey) & HOTKEYF_EXT )     uMod |= MOD_WIN;
+
+	if(dwHotKey & HOTKEYF_SHIFT)   
+		uMod |= MOD_SHIFT;
+	if(dwHotKey & HOTKEYF_CONTROL) 
+		uMod |= MOD_CONTROL;
+	if(dwHotKey & HOTKEYF_ALT)     
+		uMod |= MOD_ALT;
+	if(dwHotKey & HOTKEYF_EXT)     
+		uMod |= MOD_WIN;
 
 	return uMod;
 }
@@ -119,7 +160,9 @@ bool CHotKey::Register()
 		}
 	}
 	else
-		m_bIsRegistered = true;
+	{
+		m_bIsRegistered = false;
+	}
 
 	return m_bIsRegistered;
 }
@@ -277,7 +320,7 @@ void CHotKeys::RegisterAll(bool bMsgOnError)
 	for(int i = 0; i < count; i++)
 	{
 		pHotKey = ElementAt(i);
-		if(!pHotKey->Register())
+		if(!pHotKey->Register() && pHotKey->m_Key > 0)
 		{
 			str =  "Error Registering ";
 			str += pHotKey->GetName();

+ 2 - 1
HotKeys.h

@@ -18,6 +18,7 @@ public:
 	bool	IsRegistered() { return m_bIsRegistered; }
 	CString GetName()      { return m_Name; }
 	DWORD   GetKey()       { return m_Key; }
+	CString GetHotKeyDisplay();
 
 	void SetKey( DWORD key, bool bSave = false );
 	// profile
@@ -32,7 +33,7 @@ public:
 
 	static BOOL ValidateHotKey(DWORD dwHotKey);
 	static UINT GetModifier(DWORD dwHotKey);
-	UINT GetModifier() { return GetModifier(m_Key); }
+	UINT GetModifier() { return GetModifier(HIBYTE(m_Key)); }
 
 	bool Register();
 	bool Unregister(bool bOnShowingDitto = false);

+ 34 - 1
MainFrm.cpp

@@ -15,6 +15,7 @@
 #include "Path.h"
 #include "DittoCopyBuffer.h"
 #include "HotKeys.h"
+#include "GlobalClips.h"
 
 #ifdef _DEBUG
     #define new DEBUG_NEW
@@ -28,7 +29,9 @@
 
 bool CShowMainFrame::m_bShowingMainFrame = false;
 
-CShowMainFrame::CShowMainFrame(): m_bHideMainFrameOnExit(false), m_hWnd(NULL)
+CShowMainFrame::CShowMainFrame(): 
+	m_bHideMainFrameOnExit(false), 
+	m_hWnd(NULL)
 {
     if(m_bShowingMainFrame == false)
     {
@@ -78,6 +81,8 @@ IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
 	ON_MESSAGE(WM_SET_CONNECTED, OnSetConnected)
 	ON_MESSAGE(WM_LOAD_ClIP_ON_CLIPBOARD, OnLoadClipOnClipboard)
 	ON_MESSAGE(WM_TRAY_MENU_MOUSE_MOVE, OnSystemTrayMouseMove)
+	ON_COMMAND(ID_FIRST_GLOBALHOTKEYS, &CMainFrame::OnFirstGlobalhotkeys)
+	ON_MESSAGE(WM_GLOBAL_CLIPS_CLOSED, OnGlobalClipsClosed)
 	END_MESSAGE_MAP()
 
 	static UINT indicators[] = 
@@ -96,6 +101,7 @@ CMainFrame::CMainFrame()
     m_startKeyStateTime = 0;
     m_bMovedSelectionMoveKeyState = false;
     m_keyModifiersTimerCount = 0;
+	m_pGlobalClips = NULL;
 }
 
 CMainFrame::~CMainFrame()
@@ -948,4 +954,31 @@ void CMainFrame::OnFirstNewclip()
     CClipIDs IDs;
     IDs.Add( - 1);
     theApp.EditItems(IDs, true);
+}
+
+void CMainFrame::OnFirstGlobalhotkeys()
+{
+	if(m_pGlobalClips != NULL && ::IsWindow(m_pGlobalClips->m_hWnd) == FALSE)
+	{
+		delete m_pGlobalClips;
+		m_pGlobalClips = NULL;
+	}
+	if(m_pGlobalClips == NULL)
+	{
+		m_pGlobalClips = new GlobalClips();
+	}
+
+	if(m_pGlobalClips != NULL)
+	{
+		((GlobalClips*)m_pGlobalClips)->SetNotifyWnd(m_hWnd);
+		m_pGlobalClips->Create(IDD_GLOBAL_CLIPS, NULL);
+		m_pGlobalClips->ShowWindow(SW_SHOW);
+	}
+}
+
+LRESULT CMainFrame::OnGlobalClipsClosed(WPARAM wParam, LPARAM lParam)
+{
+	m_pGlobalClips = NULL;
+
+	return 0;
 }

+ 3 - 0
MainFrm.h

@@ -61,6 +61,7 @@ public:
     HWND m_tempFocusWnd;
     CMainFrmThread m_thread;
 	CClipboardSaveRestore m_textOnlyPaste;
+	CDialog *m_pGlobalClips;
 
     void DoDittoCopyBufferPaste(int nCopyBuffer);
     void DoFirstTenPositionsPaste(int nPos);
@@ -98,12 +99,14 @@ protected:
     afx_msg LRESULT OnSetConnected(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnLoadClipOnClipboard(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnSystemTrayMouseMove(WPARAM wParam, LPARAM lParam);
+	afx_msg LRESULT OnGlobalClipsClosed(WPARAM wParam, LPARAM lParam);
 DECLARE_MESSAGE_MAP()public:
     virtual BOOL PreTranslateMessage(MSG *pMsg);
     afx_msg void OnClose();
     afx_msg void OnFirstImport();
     afx_msg void OnDestroy();
     afx_msg void OnFirstNewclip();
+	afx_msg void OnFirstGlobalhotkeys();
 };
 
 class CShowMainFrame

+ 1 - 0
Misc.h

@@ -113,6 +113,7 @@ CString GetProcessName(HWND hWnd);
 //defined in tray icon #define WM_CUSTOMIZE_TRAY_MENU	WM_USER + 215
 //defined in tray icon #define WM_TRAY_MENU_MOUSE_MOVE	WM_USER + 216
 #define WM_RELOAD_CLIP_ORDER	WM_USER	+ 217
+#define WM_GLOBAL_CLIPS_CLOSED	WM_USER	+ 218
 
 #if !defined(_BITSET_)
 #	include <bitset>

+ 10 - 0
SendKeys.cpp

@@ -198,6 +198,16 @@ bool CSendKeys::IsVkExtended(BYTE VKey)
   return false;
 }
 
+CString CSendKeys::VkString(BYTE VKey)
+{
+	for (int i = 0; i < MaxSendKeysRecs; i++)
+	{
+		if (KeyNames[i].VKey == VKey)
+			return KeyNames[i].keyName;
+	}
+	return _T("");
+}
+
 void CSendKeys::AllKeysUp()
 {
 	for(int key = 0; key < 256; key++)

+ 1 - 0
SendKeys.h

@@ -73,6 +73,7 @@ public:
   static bool AppActivate(LPCTSTR WindowTitle, LPCTSTR WindowClass = 0);
   void SetDelay(const DWORD delay) { m_nDelayAlways = delay; }
   void SetKeyDownDelay(const DWORD delay) { m_keyDownDelay = delay; }
+  static CString VkString(BYTE VKey);
   CSendKeys();
 };
 

+ 1 - 0
StdAfx.h

@@ -36,6 +36,7 @@
 #include "UnicodeMacros.h"
 
 #include <imm.h>
+#include <afxcontrolbars.h>
 #import "riched20.dll" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("UINT_PTR"), exclude("LONG_PTR")