Browse Source

Show custom send to freinds in menu rather than in prompt dialog

scott brogden 8 years ago
parent
commit
0c1e919731
11 changed files with 192 additions and 84 deletions
  1. 8 7
      CP_Main.rc
  2. 2 0
      CP_Main.vcxproj
  3. 2 0
      CP_Main.vcxproj.filters
  4. 98 0
      CustomFriendsHelper.cpp
  5. 24 0
      CustomFriendsHelper.h
  6. 16 71
      FriendPromptDlg.cpp
  7. 4 4
      FriendPromptDlg.h
  8. 5 0
      MultiLanguage.cpp
  9. 27 1
      QPasteWnd.cpp
  10. 3 0
      QPasteWnd.h
  11. 3 1
      Resource.h

+ 8 - 7
CP_Main.rc

@@ -940,15 +940,16 @@ BEGIN
     PUSHBUTTON      "Reset",IDC_BUTTON_RESET,318,7,50,14
 END
 
-IDD_DIALOG_FREIND_PROMPT DIALOGEX 0, 0, 237, 46
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+IDD_DIALOG_FREIND_PROMPT DIALOGEX 0, 0, 237, 51
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Send to Friend"
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,125,25,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,180,25,50,14
-    LTEXT           "IP or Host Name",IDC_STATIC_FRIEND_PROMPT,7,7,53,8
-    COMBOBOX        IDC_COMBO1,64,7,166,102,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    DEFPUSHBUTTON   "OK",IDOK,125,30,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,180,30,50,14
+    LTEXT           "IP or Host Name",IDC_STATIC_FRIEND_PROMPT,7,7,53,14,SS_CENTERIMAGE
+    EDITTEXT        IDC_EDIT1,66,7,164,14,ES_AUTOHSCROLL
+    CONTROL         "Add to ""Send To"" menu",IDC_CHECK_SAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,96,10
 END
 
 IDD_ADV_OPTIONS DIALOGEX 0, 0, 262, 258
@@ -1170,7 +1171,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 230
         TOPMARGIN, 7
-        BOTTOMMARGIN, 39
+        BOTTOMMARGIN, 44
     END
 
     IDD_ADV_OPTIONS, DIALOG

+ 2 - 0
CP_Main.vcxproj

@@ -577,6 +577,7 @@
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <ClCompile Include="CreateQRCodeImage.cpp" />
+    <ClCompile Include="CustomFriendsHelper.cpp" />
     <ClCompile Include="DeleteClipData.cpp" />
     <ClCompile Include="DimWnd.cpp" />
     <ClCompile Include="DittoPopupWindow.cpp" />
@@ -1883,6 +1884,7 @@
     <ClInclude Include="ClipCompare.h" />
     <ClInclude Include="ClipFormatQListCtrl.h" />
     <ClInclude Include="CreateQRCodeImage.h" />
+    <ClInclude Include="CustomFriendsHelper.h" />
     <ClInclude Include="DeleteClipData.h" />
     <ClInclude Include="DimWnd.h" />
     <ClInclude Include="DittoPopupWindow.h" />

+ 2 - 0
CP_Main.vcxproj.filters

@@ -433,6 +433,7 @@
     <ClCompile Include="SymbolEdit.cpp" />
     <ClCompile Include="AdvGeneral.cpp" />
     <ClCompile Include="RegExFilterHelper.cpp" />
+    <ClCompile Include="CustomFriendsHelper.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="sqlite\CppSQLite3.h">
@@ -906,6 +907,7 @@
     <ClInclude Include="SymbolEdit.h" />
     <ClInclude Include="AdvGeneral.h" />
     <ClInclude Include="RegExFilterHelper.h" />
+    <ClInclude Include="CustomFriendsHelper.h" />
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="CP_Main.rc">

+ 98 - 0
CustomFriendsHelper.cpp

@@ -0,0 +1,98 @@
+#include "stdafx.h"
+#include "CustomFriendsHelper.h"
+#include "CP_Main.h"
+#include "Shared\Tokenizer.h"
+
+
+CCustomFriendsHelper::CCustomFriendsHelper()
+{
+}
+
+
+CCustomFriendsHelper::~CCustomFriendsHelper()
+{
+}
+
+void CCustomFriendsHelper::Load()
+{
+	m_list.clear();
+
+	CString oldValues = CGetSetOptions::GetCustomSendToList();
+	CTokenizer token(oldValues, _T(","));
+	CString line;
+
+	bool setSelected = false;
+
+	while (token.Next(line))
+	{
+		if (line != "")
+		{
+			m_list.push_back(line);
+		}
+	}
+}
+
+void CCustomFriendsHelper::Save()
+{
+	CString values = _T("");
+
+	int count = m_list.size();
+	for (int i = 0; i < count; i++)
+	{
+		CString lineValue = m_list[i];
+		values += _T(",");
+		values += lineValue;
+	}
+
+	CGetSetOptions::SetCustomSendToList(values);
+}
+
+void CCustomFriendsHelper::AddToMenu(CMenu *pMenu)
+{
+	bool addedSeparator = false;
+	int id = 0;
+	for (auto & element : m_list) 
+	{
+		if (addedSeparator == false)
+		{
+			pMenu->AppendMenu(MF_SEPARATOR);
+			addedSeparator = true;
+		}
+
+		pMenu->AppendMenuW(MF_STRING, (CustomFriendStartId + id), element);
+		id++;
+	}
+
+	if (addedSeparator)
+	{
+		pMenu->AppendMenu(MF_SEPARATOR);
+		pMenu->AppendMenuW(MF_STRING, (CustomFriendStartId + ClearListId), _T("Clear Custom List"));
+	}
+}
+
+void CCustomFriendsHelper::Add(CString item)
+{
+	int count = m_list.size();
+	if (count < MaxCustomFriends)
+	{
+		m_list.push_back(item);
+		Save();
+	}
+}
+
+CString CCustomFriendsHelper::GetSendTo(int id)
+{
+	int index = id - CustomFriendStartId;
+	if (index >= 0 && index < m_list.size())
+	{
+		return m_list[index];
+	}
+
+	if (index == ClearListId)
+	{
+		m_list.clear();
+		this->Save();
+	}
+
+	return _T("");
+}

+ 24 - 0
CustomFriendsHelper.h

@@ -0,0 +1,24 @@
+#pragma once
+
+#include <vector>
+
+#define CustomFriendStartId 4001
+#define MaxCustomFriends 99
+#define ClearListId 100
+
+class CCustomFriendsHelper
+{
+public:
+	CCustomFriendsHelper();
+	~CCustomFriendsHelper();
+
+	void Add(CString item);
+	void Load();
+	void Save();
+	void AddToMenu(CMenu *pMenu);
+	CString GetSendTo(int id);
+
+protected:
+	std::vector<CString> m_list;
+};
+

+ 16 - 71
FriendPromptDlg.cpp

@@ -15,7 +15,7 @@ IMPLEMENT_DYNAMIC(CFriendPromptDlg, CDialogEx)
 CFriendPromptDlg::CFriendPromptDlg(CWnd* pParent /*=NULL*/)
 	: CDialogEx(IDD_DIALOG_FREIND_PROMPT, pParent)
 {
-	m_clearList = _T("Clear List");
+	m_save = false;
 }
 
 CFriendPromptDlg::~CFriendPromptDlg()
@@ -25,47 +25,29 @@ CFriendPromptDlg::~CFriendPromptDlg()
 void CFriendPromptDlg::DoDataExchange(CDataExchange* pDX)
 {
 	CDialogEx::DoDataExchange(pDX);
-	DDX_Control(pDX, IDC_COMBO1, m_nameComboBox);
+	DDX_Control(pDX, IDC_EDIT1, m_textBox);
 }
 
 
 BEGIN_MESSAGE_MAP(CFriendPromptDlg, CDialogEx)
 	ON_BN_CLICKED(IDOK, &CFriendPromptDlg::OnBnClickedOk)
 	ON_WM_SIZE()
-	ON_CBN_SELCHANGE(IDC_COMBO1, &CFriendPromptDlg::OnCbnSelchangeCombo1)
 	ON_WM_CTLCOLOR()
+	ON_BN_CLICKED(IDCANCEL, &CFriendPromptDlg::OnBnClickedCancel)
 END_MESSAGE_MAP()
 
-
-// CFriendPromptDlg message handlers
-
-
 void CFriendPromptDlg::OnBnClickedOk()
 {
-	m_nameComboBox.GetWindowTextW(m_name);
-
-	CString values = m_name;
+	m_textBox.GetWindowTextW(m_name);
 
-	int count = m_nameComboBox.GetCount();
-	for (int i = 0; i < count; i++)
+	if (::IsDlgButtonChecked(m_hWnd, IDC_CHECK_SAVE) == BST_CHECKED)
 	{
-		CString lineValue;
-		m_nameComboBox.GetLBText(i, lineValue);
-
-		if ((lineValue != m_name) &&
-			(lineValue != m_clearList))
-		{
-			values += _T(",");
-			values += lineValue;			
-		}
+		m_save = true;
 	}
 
-	CGetSetOptions::SetCustomSendToList(values);
-
 	CDialogEx::OnOK();
 }
 
-
 BOOL CFriendPromptDlg::OnInitDialog()
 {
 	CDialogEx::OnInitDialog();
@@ -78,63 +60,19 @@ BOOL CFriendPromptDlg::OnInitDialog()
 	int extendedStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);
 	SetWindowLong(m_hWnd, GWL_EXSTYLE, extendedStyle | WS_EX_DLGMODALFRAME);
 	SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE |	SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
-	
-
-	m_Resize.SetParent(m_hWnd);
-	m_Resize.AddControl(IDC_COMBO1, DR_SizeWidth);
-	m_Resize.AddControl(IDOK, DR_MoveTop | DR_MoveLeft);
-	m_Resize.AddControl(IDCANCEL, DR_MoveTop | DR_MoveLeft);
-
-	CString oldValues = CGetSetOptions::GetCustomSendToList();
-	CTokenizer token(oldValues, _T(","));
-	CString line;
-
-	bool setSelected = false;
-
-	while (token.Next(line))
-	{
-		if (line != "")
-		{
-			int row = m_nameComboBox.AddString(line);
-			if (setSelected == false)
-			{
-				m_nameComboBox.SetCurSel(row);
-				m_nameComboBox.SetEditSel(0, line.GetLength());
-				setSelected = true;
-			}
-		}
-	}
-
-	m_nameComboBox.AddString(m_clearList);
-
-	m_nameComboBox.SetFocus();
 
+	::CheckDlgButton(m_hWnd, IDC_CHECK_SAVE, BST_CHECKED);
 
+	m_textBox.SetFocus();
+	
 	return FALSE;
 }
 
 void CFriendPromptDlg::OnSize(UINT nType, int cx, int cy)
 {
 	CDialogEx::OnSize(nType, cx, cy);
-
-	m_Resize.MoveControls(CSize(cx, cy));
-}
-
-
-void CFriendPromptDlg::OnCbnSelchangeCombo1()
-{
-	CString selection;
-	int sel = m_nameComboBox.GetCurSel();
-	m_nameComboBox.GetLBText(sel, selection);
-		
-	if (selection == m_clearList)
-	{
-		m_nameComboBox.ResetContent();
-		m_nameComboBox.AddString(m_clearList);
-	}
 }
 
-
 HBRUSH CFriendPromptDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 {
 	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
@@ -146,3 +84,10 @@ HBRUSH CFriendPromptDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 
 	//return m_brush;
 }
+
+
+void CFriendPromptDlg::OnBnClickedCancel()
+{
+	// TODO: Add your control notification handler code here
+	CDialogEx::OnCancel();
+}

+ 4 - 4
FriendPromptDlg.h

@@ -17,22 +17,22 @@ public:
 	enum { IDD = IDD_DIALOG_FREIND_PROMPT };
 #endif
 	CString GetName() { return m_name; }
+	bool GetSave() { return m_save; }
 
 protected:
 
 	CString m_name;
-	CString m_clearList;
-	CDialogResizer m_Resize;
 	CBrush m_brush;
+	bool m_save;
 
 	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 
 	DECLARE_MESSAGE_MAP()
 public:
 	afx_msg void OnBnClickedOk();
-	CComboBox m_nameComboBox;
 	virtual BOOL OnInitDialog();
 	afx_msg void OnSize(UINT nType, int cx, int cy);
-	afx_msg void OnCbnSelchangeCombo1();
 	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+	CEdit m_textBox;
+	afx_msg void OnBnClickedCancel();
 };

+ 5 - 0
MultiLanguage.cpp

@@ -315,6 +315,11 @@ CMenu * CMultiLanguage::GetMenuPos(CMenu *pMenu, const CString &csLookingForMenu
 		if(csMenuText == csLookingForMenuText)
 		{
 			nMenuPos = i;
+			pSubMenu = pMenu->GetSubMenu(i);
+			if (pSubMenu != NULL)
+			{
+				return pSubMenu;
+			}
 			return pMenu;
 		}
 

+ 27 - 1
QPasteWnd.cpp

@@ -296,6 +296,7 @@ ON_UPDATE_COMMAND_UI(ID_SENDTO_PROMPTFORNAME, &CQPasteWnd::OnUpdateSendtoPromptf
 ON_COMMAND(ID_IMPORT_IMPORTCOPIEDFILE, &CQPasteWnd::OnImportImportcopiedfile)
 ON_UPDATE_COMMAND_UI(ID_IMPORT_IMPORTCOPIEDFILE, &CQPasteWnd::OnUpdateImportImportcopiedfile)
 ON_UPDATE_COMMAND_UI(32775, &CQPasteWnd::OnUpdate32775)
+ON_COMMAND_RANGE(CustomFriendStartId, (CustomFriendStartId+ MaxCustomFriends+1), OnCustomSendToFriend)
 END_MESSAGE_MAP()
 
 
@@ -1460,7 +1461,7 @@ void CQPasteWnd::SetFriendChecks(CMenu *pMenu)
 	SetSendToMenu(pMenu, ID_MENU_SENTTO_FRIEND_TWELVE, 11);
 	SetSendToMenu(pMenu, ID_MENU_SENTTO_FRIEND_THIRTEEN, 12);
 	SetSendToMenu(pMenu, ID_MENU_SENTTO_FRIEND_FORETEEN, 13);
-	SetSendToMenu(pMenu, ID_MENU_SENTTO_FRIEND_FIFTEEN, 14);
+	SetSendToMenu(pMenu, ID_MENU_SENTTO_FRIEND_FIFTEEN, 14);	
 
 	if (g_Opt.GetAllowFriends() == false)
 	{
@@ -1472,6 +1473,18 @@ void CQPasteWnd::SetFriendChecks(CMenu *pMenu)
 			pMenu->DeleteMenu(nPos, MF_BYPOSITION);
 		}
 	}
+	else
+	{
+		CString csText("Send To");
+		int nPos = -1;
+		CMenu *sendToMenu = CMultiLanguage::GetMenuPos(pMenu, csText, nPos);
+
+		if (sendToMenu != NULL)
+		{
+			m_customFriendsHelper.Load();
+			m_customFriendsHelper.AddToMenu(sendToMenu);
+		}
+	}
 }
 
 void CQPasteWnd::SetMenuChecks(CMenu *pMenu)
@@ -4444,6 +4457,10 @@ bool CQPasteWnd::DoActionPromptSendToFriend()
 	CFriendPromptDlg dlg(this);
 	if (dlg.DoModal() == IDOK)
 	{
+		if (dlg.GetSave())
+		{
+			m_customFriendsHelper.Add(dlg.GetName());
+		}
 		SendToFriendbyPos(0, dlg.GetName());
 	}
 
@@ -6303,3 +6320,12 @@ void CQPasteWnd::OnUpdateImportImportcopiedfile(CCmdUI *pCmdUI)
 
 	UpdateMenuShortCut(pCmdUI, ActionEnums::SAVE_CF_HDROP_FIlE_DATA);
 }
+
+void CQPasteWnd::OnCustomSendToFriend(UINT idIn)
+{
+	CString ip_name = m_customFriendsHelper.GetSendTo(idIn);
+	if (ip_name != _T(""))
+	{
+		SendToFriendbyPos(0, ip_name);
+	}
+}

+ 3 - 0
QPasteWnd.h

@@ -19,6 +19,7 @@
 #include "ClipIds.h"
 #include "SymbolEdit.h"
 #include "Popup.h"
+#include "CustomFriendsHelper.h"
 
 class CMainTable
 {
@@ -166,6 +167,7 @@ public:
 	int m_leftSelectedCompareId;
 	INT64 m_extraDataCounter;
 	CPopup m_popupMsg;
+	CCustomFriendsHelper m_customFriendsHelper;
 
     void RefreshNc();
     void UpdateStatus(bool bRepaintImmediately = false); // regenerates the status (caption) text
@@ -422,6 +424,7 @@ protected:
     afx_msg void OnUpdateMenuEdititem(CCmdUI *pCmdUI);
     afx_msg void OnUpdateMenuNewclip(CCmdUI *pCmdUI);
     afx_msg void CQPasteWnd::OnAddinSelect(UINT id);
+	afx_msg void CQPasteWnd::OnCustomSendToFriend(UINT idIn);
     afx_msg LRESULT OnSelectAll(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnShowHideScrollBar(WPARAM wParam, LPARAM lParam);
 	afx_msg void OnMenuSearchDescription();

+ 3 - 1
Resource.h

@@ -209,6 +209,7 @@
 #define IDC_LAST_STARTED                1017
 #define IDC_LIST2                       1018
 #define IDC_EDIT_APP_COPY_EXCLUDE       1018
+#define IDC_EDIT_DESCRIP                1018
 #define IDC_ADD_1                       1019
 #define IDC_ADD_2                       1020
 #define IDC_EDIT_DISPLAY_TEXT           1020
@@ -516,6 +517,7 @@
 #define IDC_STATIC_SHORTCUTS            2148
 #define IDC_STATIC_FIRST_KEYPRESS       2149
 #define IDC_STATIC_FRIEND_PROMPT        2150
+#define IDC_CHECK_SAVE                  2151
 #define ID_FIRST_OPTION                 32771
 #define ID_FIRST_EXIT                   32772
 #define ID_FIRST_SHOWQUICKPASTE         32773
@@ -686,7 +688,7 @@
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        328
 #define _APS_NEXT_COMMAND_VALUE         32942
-#define _APS_NEXT_CONTROL_VALUE         2151
+#define _APS_NEXT_CONTROL_VALUE         2152
 #define _APS_NEXT_SYMED_VALUE           104
 #endif
 #endif