Browse Source

added option to paste html format as plain text
[SAB]


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

sabrogden 20 years ago
parent
commit
71ec5e37cf
10 changed files with 65 additions and 14 deletions
  1. 2 0
      CP_Main.cpp
  2. 2 0
      CP_Main.h
  3. 1 0
      CP_Main.rc
  4. 1 1
      MainFrm.cpp
  5. 31 2
      ProcessPaste.cpp
  6. 3 1
      ProcessPaste.h
  7. 2 0
      QListCtrl.cpp
  8. 18 7
      QPasteWnd.cpp
  9. 3 2
      QPasteWnd.h
  10. 2 1
      Resource.h

+ 2 - 0
CP_Main.cpp

@@ -68,6 +68,8 @@ CCP_MainApp::CCP_MainApp()
 
 	m_bExitServerThread = false;
 
+	m_HTML_Format = ::RegisterClipboardFormat("HTML Format");
+
 	::InitializeCriticalSection(&m_CriticalSection);
 }
 

+ 2 - 0
CP_Main.h

@@ -158,6 +158,8 @@ public:
 	long	m_lClipsSent;
 	long	m_lClipsRecieved;
 
+	CLIPFORMAT m_HTML_Format;
+
 	COleDateTime m_oldtStartUp;
 // Overrides
 	// ClassWizard generated virtual function overrides

+ 1 - 0
CP_Main.rc

@@ -315,6 +315,7 @@ BEGIN
         MENUITEM "View Groups\tCtrl-G",         ID_MENU_VIEWGROUPS
         MENUITEM "Paste Plain Text Only\tShift-Enter", 
                                                 ID_MENU_PASTEPLAINTEXTONLY
+        MENUITEM "Paste HTML as Plain Text",    ID_MENU_PASTEHTMLASPLAINTEXT
         MENUITEM SEPARATOR
         MENUITEM "Delete Entry\tDel",           ID_MENU_DELETE
         MENUITEM SEPARATOR

+ 1 - 1
MainFrm.cpp

@@ -483,7 +483,7 @@ LRESULT CMainFrame::OnAddToDatabaseFromSocket(WPARAM wParam, LPARAM lParam)
 			CProcessPaste paste;
 			//Don't send the paste just load it into memory
 			paste.m_bSendPaste = false;
-			paste.m_pOle->LoadFormats(&NewClip.m_Formats);
+			paste.m_pOle->LoadFormats(&NewClip.m_Formats, false);
 			paste.m_pOle->CacheGlobalData(theApp.m_cfIgnoreClipboard, NewGlobalP("Ignore", sizeof("Ignore")));
 
 			LogSendRecieveInfo("---------After LoadFormats");

+ 31 - 2
ProcessPaste.cpp

@@ -723,6 +723,7 @@ COleClipSource::COleClipSource()
 {
 	m_bLoadedFormats = false;
 	m_bOnlyPaste_CF_TEXT = false;
+	m_bPasteHTMLFormatAs_CF_TEXT = false;
 }
 
 COleClipSource::~COleClipSource()
@@ -757,7 +758,7 @@ BOOL COleClipSource::DoImmediateRender()
 		
 		CClip::LoadFormats(m_ClipIDs[0], formats, m_bOnlyPaste_CF_TEXT);
 		
-		return LoadFormats(&formats);
+		return LoadFormats(&formats, m_bPasteHTMLFormatAs_CF_TEXT);
 	}
 	
 	HGLOBAL hGlobal;
@@ -776,15 +777,41 @@ BOOL COleClipSource::DoImmediateRender()
 	return hGlobal != 0;
 }
 
-long COleClipSource::LoadFormats(CClipFormats *pFormats)
+long COleClipSource::LoadFormats(CClipFormats *pFormats, bool bPasteHTMLFormatAs_CF_TEXT)
 {
 	CClipFormat* pCF;
 
 	int	count = pFormats->GetSize(); // reusing "count"
 
+	if(bPasteHTMLFormatAs_CF_TEXT)
+	{
+		//see if the html format is in the list
+		//if it is the list we will not paste CF_TEXT
+		for(int i = 0; i < count; i++)
+		{
+			pCF = &pFormats->ElementAt(i);
+
+			if(pCF->m_cfType == theApp.m_HTML_Format)
+				break;
+		}
+
+		if(i == count)
+			bPasteHTMLFormatAs_CF_TEXT = false;
+	}
+
 	for(int i = 0; i < count; i++)
 	{
 		pCF = &pFormats->ElementAt(i);
+
+		if(bPasteHTMLFormatAs_CF_TEXT)
+		{
+			if(pCF->m_cfType == CF_TEXT)
+				continue;
+
+			if(pCF->m_cfType == theApp.m_HTML_Format)
+				pCF->m_cfType = CF_TEXT;
+		}
+
 		CacheGlobalData( pCF->m_cfType, pCF->m_hgData );
 		pCF->m_hgData = 0; // OLE owns it now
 	}
@@ -833,6 +860,7 @@ CProcessPaste::CProcessPaste()
 	m_bSendPaste = true;
 	m_bActivateTarget = true;
 	m_bOnlyPaste_CF_TEXT = false;
+	m_bPasteHTMLFormatAs_CF_TEXT = false;
 }
 
 CProcessPaste::~CProcessPaste()
@@ -843,6 +871,7 @@ CProcessPaste::~CProcessPaste()
 BOOL CProcessPaste::DoPaste()
 {
 	m_pOle->m_bOnlyPaste_CF_TEXT = m_bOnlyPaste_CF_TEXT;
+	m_pOle->m_bPasteHTMLFormatAs_CF_TEXT = m_bPasteHTMLFormatAs_CF_TEXT;
 
 	if( m_pOle->DoImmediateRender() )
 	{

+ 3 - 1
ProcessPaste.h

@@ -94,13 +94,14 @@ public:
 	CClipIDs	m_ClipIDs;
 	bool		m_bLoadedFormats;
 	bool		m_bOnlyPaste_CF_TEXT;
+	bool		m_bPasteHTMLFormatAs_CF_TEXT;
 
 	COleClipSource();
 	virtual ~COleClipSource();
 
 	BOOL DoDelayRender();
 	BOOL DoImmediateRender();
-	long LoadFormats(CClipFormats *pFormats);
+	long LoadFormats(CClipFormats *pFormats, bool bPasteHTMLFormatAs_CF_TEXT);
 
 protected:
 	DECLARE_MESSAGE_MAP()
@@ -118,6 +119,7 @@ public:
 	bool m_bSendPaste;
 	bool m_bActivateTarget;
 	bool m_bOnlyPaste_CF_TEXT;
+	bool m_bPasteHTMLFormatAs_CF_TEXT;
 
 	CProcessPaste();
 	~CProcessPaste();

+ 2 - 0
QListCtrl.cpp

@@ -1018,6 +1018,8 @@ void CQListCtrl::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
 
 void CQListCtrl::DestroyAndCreateAccelerator(BOOL bCreate)
 {
+	m_Accels.m_Map.RemoveAll();
+
 	if( bCreate )
 		CMainTable::LoadAcceleratorKeys( m_Accels );
 }

+ 18 - 7
QPasteWnd.cpp

@@ -123,6 +123,7 @@ BEGIN_MESSAGE_MAP(CQPasteWnd, CWndEx)
 	ON_COMMAND(ID_MENU_QUICKOPTIONS_FINDASYOUTYPE, OnMenuQuickoptionsFindasyoutype)
 	ON_COMMAND(ID_MENU_QUICKOPTIONS_ENSUREENTIREWINDOWISVISIBLE, OnMenuQuickoptionsEnsureentirewindowisvisible)
 	ON_COMMAND(ID_MENU_QUICKOPTIONS_SHOWCLIPSTHATAREINGROUPSINMAINLIST, OnMenuQuickoptionsShowclipsthatareingroupsinmainlist)
+	ON_COMMAND(ID_MENU_PASTEHTMLASPLAINTEXT, OnMenuPastehtmlasplaintext)
 	//}}AFX_MSG_MAP
 	ON_MESSAGE(NM_SELECT, OnListSelect)
 	ON_MESSAGE(NM_END, OnListEnd)
@@ -437,7 +438,7 @@ bool CQPasteWnd::Add(const CString &csHeader, const CString &csText, int nID)
 	return true;
 }
 
-BOOL CQPasteWnd::OpenID(long lID, bool bOnlyLoad_CF_TEXT)
+BOOL CQPasteWnd::OpenID(long lID, bool bOnlyLoad_CF_TEXT, bool bPasteHTMLAs_CF_TEXT)
 {
 	if( theApp.EnterGroupID(lID) )
 		return TRUE;
@@ -451,8 +452,11 @@ BOOL CQPasteWnd::OpenID(long lID, bool bOnlyLoad_CF_TEXT)
 
 	// else, it is a clip, so paste it
 	CProcessPaste paste;
+	
 	paste.m_bSendPaste = g_Opt.m_bSendPasteMessageAfterSelection == TRUE ? true : false;
 	paste.m_bOnlyPaste_CF_TEXT = bOnlyLoad_CF_TEXT;
+	paste.m_bPasteHTMLFormatAs_CF_TEXT = bPasteHTMLAs_CF_TEXT;
+
 	paste.GetClipIDs().Add( lID );
 	paste.DoPaste();
 	theApp.OnPasteCompleted();
@@ -463,7 +467,7 @@ BOOL CQPasteWnd::OpenID(long lID, bool bOnlyLoad_CF_TEXT)
 	return TRUE;
 }
 
-BOOL CQPasteWnd::OpenSelection(bool bOnlyLoad_CF_TEXT)
+BOOL CQPasteWnd::OpenSelection(bool bOnlyLoad_CF_TEXT, bool bPasteHTMLAs_CF_TEXT)
 {
 	ARRAY IDs;
 	m_lstHeader.GetSelectionItemData( IDs );
@@ -474,12 +478,14 @@ BOOL CQPasteWnd::OpenSelection(bool bOnlyLoad_CF_TEXT)
 		return FALSE;
 	
 	if(count == 1)
-		return OpenID(IDs[0], bOnlyLoad_CF_TEXT);
-	// else count > 1
+		return OpenID(IDs[0], bOnlyLoad_CF_TEXT, bPasteHTMLAs_CF_TEXT);
 	
 	CProcessPaste paste;
+
 	paste.m_bSendPaste = g_Opt.m_bSendPasteMessageAfterSelection == TRUE ? true : false;
 	paste.m_bOnlyPaste_CF_TEXT = bOnlyLoad_CF_TEXT;
+	paste.m_bPasteHTMLFormatAs_CF_TEXT = bPasteHTMLAs_CF_TEXT;
+	
 	paste.GetClipIDs().Copy(IDs);
 	paste.DoPaste();
 	theApp.OnPasteCompleted();
@@ -567,7 +573,7 @@ LRESULT CQPasteWnd::OnListSelect(WPARAM wParam, LPARAM lParam)
 	int nCount = (int) wParam;
 	long *pItems = (long*) lParam;
 	
-	OpenSelection();
+	OpenSelection(false, false);
 	
 	return TRUE;
 }
@@ -1442,7 +1448,12 @@ void CQPasteWnd::OnMenuGroupsMovetogroup()
 
 void CQPasteWnd::OnMenuPasteplaintextonly() 
 {
-	OpenSelection(true);	
+	OpenSelection(true, false);	
+}
+
+void CQPasteWnd::OnMenuPastehtmlasplaintext() 
+{
+	OpenSelection(false, true);
 }
 
 void CQPasteWnd::OnMenuHelp() 
@@ -2204,4 +2215,4 @@ LRESULT CQPasteWnd::OnUpDown(WPARAM wParam, LPARAM lParam)
 	m_lstHeader.SendMessage(WM_KEYDOWN, wParam, lParam);
 
 	return TRUE;
-}
+}

+ 3 - 2
QPasteWnd.h

@@ -78,8 +78,8 @@ public:
 
 	void DeleteSelectedRows();
 
-	BOOL OpenID(long lID, bool bOnlyLoad_CF_TEXT = false);
-	BOOL OpenSelection(bool bOnlyLoad_CF_TEXT = false);
+	BOOL OpenID(long lID, bool bOnlyLoad_CF_TEXT = false, bool bPasteHTMLAs_CF_TEXT = false);
+	BOOL OpenSelection(bool bOnlyLoad_CF_TEXT = false, bool bPasteHTMLAs_CF_TEXT = false);
 	BOOL OpenIndex( long nItem );
 	BOOL NewGroup( bool bGroupSelection = true );
 	// moves the caret to the given ID, selects it, and ensures it is visible.
@@ -174,6 +174,7 @@ protected:
 	afx_msg void OnMenuQuickoptionsFindasyoutype();
 	afx_msg void OnMenuQuickoptionsEnsureentirewindowisvisible();
 	afx_msg void OnMenuQuickoptionsShowclipsthatareingroupsinmainlist();
+	afx_msg void OnMenuPastehtmlasplaintext();
 	//}}AFX_MSG
 	afx_msg LRESULT OnListSelect(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnListEnd(WPARAM wParam, LPARAM lParam);

+ 2 - 1
Resource.h

@@ -230,6 +230,7 @@
 #define ID_MENU_QUICKOPTIONS_FINDASYOUTYPE 32848
 #define ID_MENU_QUICKOPTIONS_ENSUREENTIREWINDOWISVISIBLE 32849
 #define ID_MENU_QUICKOPTIONS_SHOWCLIPSTHATAREINGROUPSINMAINLIST 32850
+#define ID_MENU_PASTEHTMLASPLAINTEXT    32851
 
 // Next default values for new objects
 // 
@@ -237,7 +238,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        157
-#define _APS_NEXT_COMMAND_VALUE         32851
+#define _APS_NEXT_COMMAND_VALUE         32852
 #define _APS_NEXT_CONTROL_VALUE         2037
 #define _APS_NEXT_SYMED_VALUE           101
 #endif