Kaynağa Gözat

add size limit for a clip
[SAB]


git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@177 595ec19a-5cb4-439b-94a8-42fb3063c22c

sabrogden 20 yıl önce
ebeveyn
işleme
aaa6b558fc
7 değiştirilmiş dosya ile 71 ekleme ve 3 silme
  1. 5 2
      CP_Main.rc
  2. 13 0
      Misc.cpp
  3. 4 0
      Misc.h
  4. 12 0
      OptionsGeneral.cpp
  5. 1 0
      OptionsGeneral.h
  6. 34 0
      ProcessCopy.cpp
  7. 2 1
      Resource.h

+ 5 - 2
CP_Main.rc

@@ -529,7 +529,7 @@ BEGIN
                     IDC_STATIC,7,159,336,25
 END
 
-IDD_OPTIONS_GENERAL DIALOG DISCARDABLE  0, 0, 309, 214
+IDD_OPTIONS_GENERAL DIALOG DISCARDABLE  0, 0, 309, 225
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "General"
 FONT 8, "MS Sans Serif"
@@ -576,6 +576,9 @@ BEGIN
     CONTROL         "Paste Clip in active window after selection",
                     IDC_SEND_PASTE_MESSAGE,"Button",BS_AUTOCHECKBOX | 
                     WS_TABSTOP,23,190,148,10
+    LTEXT           "Maximum Clip Size in Kilobytes",IDC_STATIC,23,202,96,8
+    EDITTEXT        IDC_EDIT_MAX_SIZE,121,201,26,12,ES_AUTOHSCROLL
+    LTEXT           "(Leave blank for no limit)",IDC_STATIC,151,202,78,8
 END
 
 IDD_SELECT_DB DIALOG DISCARDABLE  0, 0, 276, 46
@@ -849,7 +852,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 302
         TOPMARGIN, 7
-        BOTTOMMARGIN, 206
+        BOTTOMMARGIN, 217
     END
 
     IDD_SELECT_DB, DIALOG

+ 13 - 0
Misc.cpp

@@ -487,6 +487,7 @@ BOOL CGetSetOptions::m_bSendPasteMessageAfterSelection;
 BOOL CGetSetOptions::m_bFindAsYouType;
 BOOL CGetSetOptions::m_bEnsureEntireWindowCanBeSeen;
 BOOL CGetSetOptions::m_bShowAllClipsInMainList;
+long CGetSetOptions::m_lMaxClipSizeInKs;
 
 CGetSetOptions g_Opt;
 
@@ -519,6 +520,7 @@ CGetSetOptions::CGetSetOptions()
 	m_bFindAsYouType = GetFindAsYouType();
 	m_bEnsureEntireWindowCanBeSeen = GetEnsureEntireWindowCanBeSeen();
 	m_bShowAllClipsInMainList = GetShowAllClipsInMainList();
+	m_lMaxClipSizeInKs = GetMaxClipSizeInKs() * 1024;
 
 	GetExtraNetworkPassword(true);
 	
@@ -1342,6 +1344,17 @@ BOOL CGetSetOptions::GetShowAllClipsInMainList()
 	return GetProfileLong("ShowAllClipsInMainList", TRUE);
 }
 
+long CGetSetOptions::GetMaxClipSizeInKs()
+{
+	return GetProfileLong("MaxClipSizeInKs", 0);
+}
+
+void CGetSetOptions::SetMaxClipSizeInKs(long lK)
+{
+	m_lMaxClipSizeInKs = lK * 1024;
+	SetProfileLong("MaxClipSizeInKs", lK);
+}
+
 /*------------------------------------------------------------------*\
 CHotKey - a single system-wide hotkey
 \*------------------------------------------------------------------*/

+ 4 - 0
Misc.h

@@ -347,6 +347,10 @@ public:
 	static void		SetExtraNetworkPassword(CString csPassword);
 	static CString	GetExtraNetworkPassword(bool bFillArray);
 
+	static long		m_lMaxClipSizeInKs;
+	static long		GetMaxClipSizeInKs();
+	static void		SetMaxClipSizeInKs(long lK);
+
 	static CStringArray m_csNetworkPasswordArray;
 
 	/*

+ 12 - 0
OptionsGeneral.cpp

@@ -34,6 +34,7 @@ void COptionsGeneral::DoDataExchange(CDataExchange* pDX)
 {
 	CPropertyPage::DoDataExchange(pDX);
 	//{{AFX_DATA_MAP(COptionsGeneral)
+	DDX_Control(pDX, IDC_EDIT_MAX_SIZE, m_MaxClipSize);
 	DDX_Control(pDX, IDC_SEND_PASTE_MESSAGE, m_btSendPasteMessage);
 	DDX_Control(pDX, IDC_HIDE_DITO_ON_HOT_KEY, m_btHideDittoOnHotKey);
 	DDX_Control(pDX, IDC_DESC_TEXT_SIZE, m_DescTextSize);
@@ -93,6 +94,13 @@ BOOL COptionsGeneral::OnInitDialog()
 	m_btHideDittoOnHotKey.SetCheck(g_Opt.m_HideDittoOnHotKeyIfAlreadyShown);
 	m_btSendPasteMessage.SetCheck(g_Opt.m_bSendPasteMessageAfterSelection);
 
+	if(g_Opt.m_lMaxClipSizeInKs > 0)
+	{
+		CString csMax;
+		csMax.Format("%d", g_Opt.m_lMaxClipSizeInKs/1024);
+		m_MaxClipSize.SetWindowText(csMax);
+	}
+
 	CString csPath = CGetSetOptions::GetDBPath(FALSE);
 	if(csPath.IsEmpty())
 	{
@@ -139,6 +147,10 @@ BOOL COptionsGeneral::OnApply()
 	g_Opt.SetUpdateTimeOnPaste( m_btUpdateTimeOnPaste.GetCheck() );
 	g_Opt.SetSaveMultiPaste( m_btSaveMultiPaste.GetCheck() );
 
+	CString csMax;
+	m_MaxClipSize.GetWindowText(csMax);
+	g_Opt.SetMaxClipSizeInKs(atoi(csMax));
+
 	if(m_btSetDatabasePath.GetCheck() == BST_CHECKED)
 	{
 		CString csPath;

+ 1 - 0
OptionsGeneral.h

@@ -27,6 +27,7 @@ public:
 // Dialog Data
 	//{{AFX_DATA(COptionsGeneral)
 	enum { IDD = IDD_OPTIONS_GENERAL };
+	CEdit	m_MaxClipSize;
 	CButton	m_btSendPasteMessage;
 	CButton	m_btHideDittoOnHotKey;
 	CNumberEdit	m_DescTextSize;

+ 34 - 0
ProcessCopy.cpp

@@ -326,6 +326,16 @@ bool CClip::LoadFromClipboard( CClipTypes* pClipTypes )
 			nSize = GlobalSize( cf.m_hgData );
 			if( nSize > 0 )
 			{
+				if(g_Opt.m_lMaxClipSizeInKs > 0 &&
+					nSize > g_Opt.m_lMaxClipSizeInKs)
+				{
+					CString cs;
+					cs.Format("Maximum clip size reached max size = %d, clip size = %d", g_Opt.m_lMaxClipSizeInKs, nSize);
+					Log(cs);
+
+					EXIT_LoadFromClipboard(false);
+				}
+
 				ASSERT( ::IsValid(cf.m_hgData) );
 				m_Formats.Add( cf );
 				m_lTotalCopySize += nSize;
@@ -433,6 +443,30 @@ bool CClip::AddToDB( bool bCheckForDuplicates )
 	return bResult;
 }
 
+//bool CClip::CheckForMaxSize()
+//{
+//	try
+//	{
+//		CClipFormat* pCF;
+//		
+//		for( int i = m_Formats.GetSize()-1; i >= 0 ; i-- )
+//		{
+//			pCF = &m_Formats.ElementAt(i);
+//	
+//			LPVOID pvData = GlobalLock(pCF->m_hgData);
+//			if(pvData)
+//			{
+//				GlobalSize(pCF->m_hgData)
+//			}
+//			GlobalUnlock(pCF->m_hgData);
+//	
+//		}
+//	}
+//	CATCHDAO
+//		
+//	return false;
+//}
+
 // if a duplicate exists, set recset to the duplicate and return true
 bool CClip::FindDuplicate( CMainTable& recset, BOOL bCheckLastOnly )
 {

+ 2 - 1
Resource.h

@@ -147,6 +147,7 @@
 #define IDC_EDIT_ADDITIONAL             2037
 #define IDC_CHECK_WIN7                  2038
 #define IDC_CHECK_SHOW_ALL_IN_MAIN_LIST 2038
+#define IDC_EDIT_MAX_SIZE               2038
 #define IDC_CHECK_WIN8                  2039
 #define IDC_CHECK_WIN9                  2040
 #define IDC_CHECK_WIN10                 2041
@@ -240,7 +241,7 @@
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        157
 #define _APS_NEXT_COMMAND_VALUE         32852
-#define _APS_NEXT_CONTROL_VALUE         2038
+#define _APS_NEXT_CONTROL_VALUE         2039
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif