瀏覽代碼

chain script paste support

sabrogden 8 年之前
父節點
當前提交
3a003059b5
共有 12 個文件被更改,包括 124 次插入18 次删除
  1. 13 13
      CP_Main.rc
  2. 36 0
      ChaiScriptXml.cpp
  3. 5 0
      ChaiScriptXml.h
  4. 1 0
      CustomFriendsHelper.cpp
  5. 34 0
      OleClipSource.cpp
  6. 16 0
      QPasteWnd.cpp
  7. 3 2
      QPasteWnd.h
  8. 1 1
      ScriptEditor.cpp
  9. 1 0
      SpecialPasteOptions.cpp
  10. 1 0
      SpecialPasteOptions.h
  11. 1 1
      ToolTipEx.cpp
  12. 12 1
      chaiscript/dispatchkit/bootstrap_stl.hpp

+ 13 - 13
CP_Main.rc

@@ -970,7 +970,7 @@ BEGIN
     PUSHBUTTON      "On Paste Scripts",IDC_BUTTON_PASTE_SCRIPTS,7,237,108,11
 END
 
-IDD_SCRIPT_EDITOR DIALOGEX 0, 0, 435, 297
+IDD_SCRIPT_EDITOR DIALOGEX 0, 0, 435, 314
 STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
 CAPTION "Scripts"
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@@ -978,20 +978,20 @@ BEGIN
     EDITTEXT        IDC_EDIT_NAME,142,7,284,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_DESC,142,24,284,14,ES_AUTOHSCROLL
     CONTROL         "",IDC_CHECK_ACTIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,42,16,10
-    EDITTEXT        IDC_EDIT_SCRIPT,100,67,326,106,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN
-    EDITTEXT        IDC_EDIT_INPUT,100,200,265,27,ES_AUTOHSCROLL | ES_WANTRETURN
-    EDITTEXT        IDC_EDIT_OUTPUT,100,243,326,27,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_SCRIPT,100,67,326,102,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL
+    EDITTEXT        IDC_EDIT_INPUT,100,195,265,40,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL
+    EDITTEXT        IDC_EDIT_OUTPUT,100,250,326,40,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL
     PUSHBUTTON      "Run",IDC_BUTTON_RUN,376,205,50,14
-    DEFPUSHBUTTON   "OK",IDOK,321,276,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,376,276,50,14
-    LISTBOX         IDC_LIST_SCRIPTS,7,7,83,268,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Add",IDC_BUTTON_ADD_SCRIPT,7,276,32,14
-    PUSHBUTTON      "Delete",IDC_BUTTON_DELETE_SCRIPT,58,276,32,14
+    DEFPUSHBUTTON   "OK",IDOK,321,293,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,376,293,50,14
+    LISTBOX         IDC_LIST_SCRIPTS,7,7,83,281,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+    PUSHBUTTON      "Add",IDC_BUTTON_ADD_SCRIPT,7,293,32,14
+    PUSHBUTTON      "Delete",IDC_BUTTON_DELETE_SCRIPT,58,293,32,14
     LTEXT           "Name",IDC_STATIC_NAME,100,7,19,14,SS_CENTERIMAGE
     LTEXT           "Desciption",IDC_STATIC_DESC,100,24,34,14,SS_CENTERIMAGE
-    LTEXT           "Sample Input",IDC_STATIC_INPUT,100,189,43,8
-    LTEXT           "Sample Output",IDC_STATIC_OUTPUT,100,232,48,8
-    LTEXT           "All function must return true/false.  Return true to cancel saving the copy or cancel the paste.",IDC_STATIC_RETURN_DESC,100,177,326,8
+    LTEXT           "Sample Input",IDC_STATIC_INPUT,100,185,43,8
+    LTEXT           "Sample Output",IDC_STATIC_OUTPUT,100,238,48,8
+    LTEXT           "All function must return true/false.  Return true to cancel saving the copy or cancel the paste.",IDC_STATIC_RETURN_DESC,100,174,326,8
     LTEXT           "Script",IDC_STATIC_SCRIPT,100,56,30,10
     LTEXT           "Active",IDC_STATIC_ACTIVE,100,42,21,14
     CONTROL         "ChaiScript (http://chaiscript.com/)",IDC_MFCLINK_CHAISCRIPT,
@@ -1223,7 +1223,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 426
         TOPMARGIN, 7
-        BOTTOMMARGIN, 290
+        BOTTOMMARGIN, 307
     END
 END
 #endif    // APSTUDIO_INVOKED

+ 36 - 0
ChaiScriptXml.cpp

@@ -95,4 +95,40 @@ CString CChaiScriptXml::Save()
 	CString cs = printer.CStr();
 
 	return cs;
+}
+
+void CChaiScriptXml::AddToMenu(CMenu *pMenu)
+{
+	if (m_list.size() > 0)
+	{
+		pMenu->AppendMenu(MF_SEPARATOR);
+
+		bool addedItem = false;
+		int id = 0;
+		for (auto & element : m_list)
+		{
+			if (addedItem == false)
+			{
+				addedItem = true;
+			}
+
+			CString cs;
+			if (element.m_description != _T(""))
+			{
+				cs.Format(_T("(%s) - %s"), element.m_name, element.m_description);
+			}
+			else
+			{
+				cs.Format(_T("%s"), element.m_name);
+			}
+
+			pMenu->AppendMenuW(MF_STRING, (ChaiScriptMenuStartId + id), cs);
+			id++;
+
+			if (id > MaxChaiScripts)
+			{
+				break;
+			}
+		}
+	}
 }

+ 5 - 0
ChaiScriptXml.h

@@ -2,6 +2,9 @@
 
 #include <vector>
 
+#define ChaiScriptMenuStartId 5001
+#define MaxChaiScripts 99
+
 class CDittoChaiScriptXmlItem
 {
 public:
@@ -27,4 +30,6 @@ public:
 	CString GetScript(CString name, BOOL &active);
 
 	std::vector<CDittoChaiScriptXmlItem> m_list;
+
+	void AddToMenu(CMenu *pMenu);
 };

+ 1 - 0
CustomFriendsHelper.cpp

@@ -77,6 +77,7 @@ void CCustomFriendsHelper::Save()
 	}
 	
 	TiXmlPrinter printer;
+	printer.SetLineBreak("");
 	doc.Accept(&printer);
 	CString cs = printer.CStr();
 

+ 34 - 0
OleClipSource.cpp

@@ -14,6 +14,8 @@
 #include "sqlite\unicode\uchar.h"
 #include "Path.h"
 #include "Md5.h"
+#include "DittoChaiScript.h"
+#include "ChaiScriptOnCopy.h"
 
 /*------------------------------------------------------------------*\
 COleClipSource
@@ -196,6 +198,38 @@ BOOL COleClipSource::DoImmediateRender()
 	
 	SaveDittoFileDataToFile(clip);
 
+	if (m_pasteOptions.m_pasteScriptIndex >= 0 &&
+		m_pasteOptions.m_pasteScriptIndex < g_Opt.m_pasteScripts.m_list.size())
+	{
+		try
+		{
+			Log(StrF(_T("Start of process copy name: %s, script: %s"), g_Opt.m_pasteScripts.m_list[m_pasteOptions.m_pasteScriptIndex].m_name, g_Opt.m_pasteScripts.m_list[m_pasteOptions.m_pasteScriptIndex].m_script));
+
+			ChaiScriptOnCopy onPaste;
+			CDittoChaiScript clipData(&clip, "");
+			if (onPaste.ProcessScript(clipData, (LPCSTR)CTextConvert::ConvertToChar(g_Opt.m_pasteScripts.m_list[m_pasteOptions.m_pasteScriptIndex].m_script)) == false)
+			{
+				Log(StrF(_T("End of process copy name: %s, returned false, not saving this copy to Ditto, last Error: %s"), g_Opt.m_pasteScripts.m_list[m_pasteOptions.m_pasteScriptIndex].m_name, onPaste.m_lastError));
+
+				return -1;
+			}
+
+			Log(StrF(_T("End of process copy name: %s, returned true, last Error: %s"), g_Opt.m_pasteScripts.m_list[m_pasteOptions.m_pasteScriptIndex].m_name, onPaste.m_lastError));			
+		}
+		catch (CException *ex)
+		{
+			TCHAR szCause[255];
+			ex->GetErrorMessage(szCause, 255);
+			CString cs;
+			cs.Format(_T("chai script paste exception: %s"), szCause);
+			Log(cs);
+		}
+		catch (...)
+		{
+			Log(_T("chai script paste exception 2"));
+		}
+	}
+
 	return PutFormatOnClipboard(&clip.m_Formats) > 0;
 }
 

+ 16 - 0
QPasteWnd.cpp

@@ -297,6 +297,7 @@ 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)
+ON_COMMAND_RANGE(ChaiScriptMenuStartId, (ChaiScriptMenuStartId + MaxChaiScripts + 1), OnChaiScriptPaste)
 ON_MESSAGE(WM_DPICHANGED, OnDpiChanged)
 END_MESSAGE_MAP()
 
@@ -1451,6 +1452,14 @@ void CQPasteWnd::ShowRightClickMenu()
 
 		SetFriendChecks(cmSubMenu);
 
+		CString specialPaste("Special Paste");
+		int nPos = -1;
+		CMenu *sendToMenu = CMultiLanguage::GetMenuPos(cmSubMenu, specialPaste, nPos);
+		if (sendToMenu != NULL)
+		{
+			g_Opt.m_pasteScripts.AddToMenu(sendToMenu);
+		}
+
         cmSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON, pp.x, pp.y, this, NULL);
     }
 }
@@ -6450,4 +6459,11 @@ void CQPasteWnd::OnCustomSendToFriend(UINT idIn)
 	{
 		SendToFriendbyPos(0, ip_name);
 	}
+}
+
+void CQPasteWnd::OnChaiScriptPaste(UINT idIn)
+{
+	CSpecialPasteOptions pasteOptions;
+	pasteOptions.m_pasteScriptIndex = ChaiScriptMenuStartId - idIn;
+	OpenSelection(pasteOptions);
 }

+ 3 - 2
QPasteWnd.h

@@ -427,8 +427,9 @@ protected:
     afx_msg void OnMenuNewclip();
     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 void OnAddinSelect(UINT id);
+	afx_msg void OnCustomSendToFriend(UINT idIn);
+	afx_msg void OnChaiScriptPaste(UINT idIn);
     afx_msg LRESULT OnSelectAll(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnShowHideScrollBar(WPARAM wParam, LPARAM lParam);
 	afx_msg void OnMenuSearchDescription();

+ 1 - 1
ScriptEditor.cpp

@@ -272,7 +272,7 @@ void CScriptEditor::OnBnClickedButtonRun()
 
 	if (test.m_lastError == _T(""))
 	{
-		SetDlgItemText(IDC_EDIT_OUTPUT, _T("returned false"));
+		SetDlgItemText(IDC_EDIT_OUTPUT, _T("returned false\r\n") + CTextConvert::MultiByteToUnicodeString(clipData.GetAsciiString().c_str()));
 	}
 	else
 	{

+ 1 - 0
SpecialPasteOptions.cpp

@@ -17,6 +17,7 @@ CSpecialPasteOptions::CSpecialPasteOptions()
 	m_pasteAddingDateTime = false;
 	m_delayRenderLockout = 0;
 	m_dragDropFilesOnly = false;
+	m_pasteScriptIndex = -1;
 }
 
 CSpecialPasteOptions::~CSpecialPasteOptions()

+ 1 - 0
SpecialPasteOptions.h

@@ -20,6 +20,7 @@ public:
 	CClipFormats *m_pPasteFormats;
 	DWORD m_delayRenderLockout;
 	bool m_dragDropFilesOnly;
+	int m_pasteScriptIndex;
 
 	bool LimitFormatsToText() 
 	{ 

+ 1 - 1
ToolTipEx.cpp

@@ -428,7 +428,7 @@ BOOL CToolTipEx::OnMsg(MSG *pMsg)
 
 				if (m_pToolTipActions != NULL)
 				{
-					if (m_pToolTipActions->ContainsKey(vk))
+					if (m_pToolTipActions->ContainsKey((int)vk))
 					{
 						return FALSE;
 					}

+ 12 - 1
chaiscript/dispatchkit/bootstrap_stl.hpp

@@ -701,13 +701,24 @@ namespace chaiscript
 
 
           m.add(fun([](const String *s, const String &f, size_t pos) { return s->find(f, pos); } ), "find");
+		  m.add(fun([](const String *s, typename String::value_type c, size_t pos) { return s->find(c, pos); } ), "find");
+		  
           m.add(fun([](const String *s, const String &f, size_t pos) { return s->rfind(f, pos); } ), "rfind");
+		  m.add(fun([](const String *s, typename String::value_type c, size_t pos) { return s->rfind(c, pos); } ), "rfind");
+		  
           m.add(fun([](const String *s, const String &f, size_t pos) { return s->find_first_of(f, pos); } ), "find_first_of");
+		  m.add(fun([](const String *s, ypename String::value_type, size_t pos) { return s->find_first_of(c, pos); } ), "find_first_of");
+		  
           m.add(fun([](const String *s, const String &f, size_t pos) { return s->find_last_of(f, pos); } ), "find_last_of");
+		  m.add(fun([](const String *s, ypename String::value_type, size_t pos) { return s->find_last_of(c, pos); } ), "find_last_of");
+		  
           m.add(fun([](const String *s, const String &f, size_t pos) { return s->find_last_not_of(f, pos); } ), "find_last_not_of");
+		  m.add(fun([](const String *s, ypename String::value_type, size_t pos) { return s->find_last_not_of(c, pos); } ), "find_last_not_of");
+		  
           m.add(fun([](const String *s, const String &f, size_t pos) { return s->find_first_not_of(f, pos); } ), "find_first_not_of");
+		  m.add(fun([](const String *s, ypename String::value_type, size_t pos) { return s->find_first_not_of(c, pos); } ), "find_first_not_of");
 
-	  m.add(fun([](String *s, typename String::value_type c) -> decltype(auto) { return (*s += c); } ), "+=");
+		  m.add(fun([](String *s, typename String::value_type c) -> decltype(auto) { return (*s += c); } ), "+=");
 
 
           m.add(fun([](String *s) { s->clear(); } ), "clear");