Browse Source

Scripting updates

scott brogden 8 years ago
parent
commit
7a5e1f5fbc
12 changed files with 116 additions and 69 deletions
  1. 2 2
      AdvGeneral.cpp
  2. 2 2
      CP_Main.rc
  3. 11 8
      CP_Main.vcxproj.filters
  4. 6 5
      ChaiScriptOnCopy.cpp
  5. 2 2
      ChaiScriptOnCopy.h
  6. 3 1
      Clip.cpp
  7. 1 1
      CopyProperties.cpp
  8. 1 6
      DimWnd.cpp
  9. 12 8
      DittoChaiScript.cpp
  10. 2 2
      DittoChaiScript.h
  11. 72 32
      ScriptEditor.cpp
  12. 2 0
      ScriptEditor.h

+ 2 - 2
AdvGeneral.cpp

@@ -607,7 +607,7 @@ void CAdvGeneral::OnBnClickedBtCompactAndRepair()
 
 void CAdvGeneral::OnBnClickedButtonCopyScripts()
 {
-	CDimWnd dim(this->GetParent());
+	CDimWnd dim(this);
 
 	CScriptEditor e(this);
 	e.m_xml.Load(CGetSetOptions::GetCopyScriptsXml());
@@ -620,7 +620,7 @@ void CAdvGeneral::OnBnClickedButtonCopyScripts()
 
 void CAdvGeneral::OnBnClickedButtonPasteScripts2()
 {
-	CDimWnd dim(this->GetParent());
+	CDimWnd dim(this);
 
 	CScriptEditor e(this);
 	e.m_xml.Load(CGetSetOptions::GetPasteScriptsXml());

+ 2 - 2
CP_Main.rc

@@ -716,7 +716,7 @@ BEGIN
     CONTROL         "&Never Auto Delete",IDC_NEVER_AUTO_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,40,105,10
     COMBOBOX        IDC_COMBO1,71,91,215,128,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     LISTBOX         IDC_COPY_DATA,7,205,279,43,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Delete",IDC_DELETE_COPY_DATA,6,248,42,12
+    PUSHBUTTON      "Delete",IDC_DELETE_COPY_DATA,6,251,42,12
     DEFPUSHBUTTON   "OK",IDOK,163,268,50,14
     PUSHBUTTON      "Cancel",IDCANCEL,236,268,50,14
     LTEXT           "Item Title",IDC_STATIC_TITLE,7,108,168,8
@@ -991,7 +991,7 @@ BEGIN
     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.  Either to cancel saving the copy or cancel the paste.",IDC_STATIC_RETURN_DESC,100,177,326,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           "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,

+ 11 - 8
CP_Main.vcxproj.filters

@@ -434,16 +434,16 @@
     <ClCompile Include="AdvGeneral.cpp" />
     <ClCompile Include="RegExFilterHelper.cpp" />
     <ClCompile Include="CustomFriendsHelper.cpp" />
-    <ClCompile Include="DittoChaiScript.cpp">
-      <Filter>ChaiScript</Filter>
-    </ClCompile>
+    <ClCompile Include="ScriptEditor.cpp" />
     <ClCompile Include="ChaiScriptOnCopy.cpp">
       <Filter>ChaiScript</Filter>
     </ClCompile>
     <ClCompile Include="ChaiScriptXml.cpp">
       <Filter>ChaiScript</Filter>
     </ClCompile>
-    <ClCompile Include="ScriptEditor.cpp" />
+    <ClCompile Include="DittoChaiScript.cpp">
+      <Filter>ChaiScript</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="sqlite\CppSQLite3.h">
@@ -918,16 +918,16 @@
     <ClInclude Include="AdvGeneral.h" />
     <ClInclude Include="RegExFilterHelper.h" />
     <ClInclude Include="CustomFriendsHelper.h" />
-    <ClInclude Include="DittoChaiScript.h">
-      <Filter>ChaiScript</Filter>
-    </ClInclude>
+    <ClInclude Include="ScriptEditor.h" />
     <ClInclude Include="ChaiScriptOnCopy.h">
       <Filter>ChaiScript</Filter>
     </ClInclude>
     <ClInclude Include="ChaiScriptXml.h">
       <Filter>ChaiScript</Filter>
     </ClInclude>
-    <ClInclude Include="ScriptEditor.h" />
+    <ClInclude Include="DittoChaiScript.h">
+      <Filter>ChaiScript</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="CP_Main.rc">
@@ -1417,6 +1417,9 @@
     <Filter Include="QRCode">
       <UniqueIdentifier>{3a17864d-e44b-4afe-84b0-a44dee42c591}</UniqueIdentifier>
     </Filter>
+    <Filter Include="ChaiScript">
+      <UniqueIdentifier>{13844e6c-68be-44ca-93c7-1f0b08f0b319}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <Manifest Include="DeclareDPIAware.manifest">

+ 6 - 5
ChaiScriptOnCopy.cpp

@@ -1,6 +1,5 @@
 #include "stdafx.h"
 #include "ChaiScriptOnCopy.h"
-#include "DittoChaiScript.h"
 #include "Shared\TextConvert.h"
 
 #include "chaiscript/chaiscript.hpp"
@@ -18,18 +17,20 @@ ChaiScriptOnCopy::~ChaiScriptOnCopy()
 }
 
 
-bool ChaiScriptOnCopy::ProcessScript(IClip *pClip, std::string script, std::string activeApp)
+bool ChaiScriptOnCopy::ProcessScript(CDittoChaiScript &clipData, std::string script)
 {
 	m_lastError = _T("");
 	bool continueCopy = true;
-	
+	 
 	try
 	{
 		ChaiScript chai;
 
 		chai.add(chaiscript::fun(&CDittoChaiScript::GetClipMD5), "GetClipMD5");
+		chai.add(chaiscript::fun(&CDittoChaiScript::GetClipSize), "GetClipSize");
+		chai.add(chaiscript::fun(&CDittoChaiScript::GetAsciiString), "GetAsciiString");
+		chai.add(chaiscript::fun(&CDittoChaiScript::SetAsciiString), "SetAsciiString");
 
-		CDittoChaiScript clipData(pClip, activeApp);
 		chai.add(chaiscript::var(&clipData), "clip");
 
 		//loop over all scripts
@@ -42,7 +43,7 @@ bool ChaiScriptOnCopy::ProcessScript(IClip *pClip, std::string script, std::stri
 		Boxed_Value bv = chai.eval(script);
 		if (chaiscript::boxed_cast<bool> (bv) == true)
 		{
-			m_lastError = _T("Script return true, to cancel copy");
+			m_lastError = _T("Script returned true, canceling copy");
 			continueCopy = false;
 		}
 	}

+ 2 - 2
ChaiScriptOnCopy.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include "Shared\IClip.h"
+#include "DittoChaiScript.h"
 #include <string>
 
 class ChaiScriptOnCopy
@@ -9,7 +9,7 @@ public:
 	ChaiScriptOnCopy();
 	~ChaiScriptOnCopy();
 
-	bool ProcessScript(IClip *pClip, std::string script, std::string activeApp);
+	bool ProcessScript(CDittoChaiScript &clipData, std::string script);
 
 	CString m_lastError;
 };

+ 3 - 1
Clip.cpp

@@ -13,6 +13,7 @@
 #include "Misc.h"
 #include "Md5.h"
 #include "ChaiScriptOnCopy.h"
+#include "DittoChaiScript.h"
 
 #include <Mmsystem.h>
 
@@ -530,7 +531,8 @@ int CClip::LoadFromClipboard(CClipTypes* pClipTypes, bool checkClipboardIgnore,
 				Log(StrF(_T("Start of process copy name: %s, script: %s"), listItem.m_name, listItem.m_script));
 
 				ChaiScriptOnCopy onCopy;
-				if (onCopy.ProcessScript(this, (LPCSTR)CTextConvert::ConvertToChar(listItem.m_script), (LPCSTR)CTextConvert::ConvertToChar(activeApp)) == false)
+				CDittoChaiScript clipData(this, (LPCSTR)CTextConvert::ConvertToChar(activeApp));
+				if (onCopy.ProcessScript(clipData, (LPCSTR)CTextConvert::ConvertToChar(listItem.m_script)) == false)
 				{
 					Log(StrF(_T("End of process copy name: %s, returned false, not saving this copy to Ditto, last Error: %s"), listItem.m_name, onCopy.m_lastError));
 

+ 1 - 1
CopyProperties.cpp

@@ -209,7 +209,7 @@ void CCopyProperties::LoadDataFromCClip(CClip &Clip)
 				m_lCopyData.SetItemData(nIndex, pCF->m_dataId);
 		}
 	}
-
+	
 	int selectedRow = m_lCopyData.GetCount()-1;
 	if(selectedRow >= 0 && selectedRow < m_lCopyData.GetCount())
 	{

+ 1 - 6
DimWnd.cpp

@@ -5,15 +5,13 @@ BEGIN_MESSAGE_MAP(CDimWnd, CFrameWnd)
 	ON_WM_ERASEBKGND()
 END_MESSAGE_MAP()
 
-// For preventing two dimmer windows ever appearing
-bool is_dimmer_active = false;
 
 CDimWnd::CDimWnd(CWnd *pParent)
 {
 
 	// Don't do anything if the main frame doesn't appear to be there,
 	// or if there is already dimming happening.
-	if (pParent != NULL && !is_dimmer_active)
+	if (pParent != NULL)
 	{
 		// Get the client area of the window to dim.
 		CRect rc;
@@ -32,14 +30,11 @@ CDimWnd::CDimWnd(CWnd *pParent)
 
 		// Show the dimmer window
 		ShowWindow(SW_SHOW);
-
-		is_dimmer_active = true;
 	}
 }
 
 CDimWnd::~CDimWnd()
 {
-	is_dimmer_active = false;
 }
 
 BOOL CDimWnd::OnEraseBkgnd(CDC* pDC)

+ 12 - 8
DittoChaiScript.cpp

@@ -1,6 +1,6 @@
 #include "stdafx.h"
 #include "DittoChaiScript.h"
-
+#include "Shared\TextConvert.h"
 #include "Md5.h"
 #include "Misc.h"
 
@@ -43,14 +43,14 @@ void CDittoChaiScript::SetAsciiString(std::string stringVal)
 	{
 		m_pClip->Clips()->DeleteAll();
 
-		//HGLOBAL hGlobal = ::NewGlobalP(stringVal.c_str, 4);
-	//	ASSERT(hGlobal);
+		HGLOBAL hGlobal = ::NewGlobalP((LPVOID)stringVal.c_str(), stringVal.size()+1);
+		ASSERT(hGlobal);
 
-		//m_pClip->Clips()->AddNew(CF_TEXT, hGlobal);
+		m_pClip->Clips()->AddNew(CF_TEXT, hGlobal);
 	}
 }
 
-std::string CDittoChaiScript::GetClipMD5(int clipboardFormat)
+std::string CDittoChaiScript::GetClipMD5(std::string clipboardFormat)
 {
 	CMd5 md5;
 	md5.MD5Init();
@@ -59,7 +59,9 @@ std::string CDittoChaiScript::GetClipMD5(int clipboardFormat)
 
 	if (m_pClip)
 	{
-		IClipFormat *pFormat = m_pClip->Clips()->FindFormatEx(clipboardFormat);
+		int formatId = GetFormatID(CTextConvert::MultiByteToUnicodeString(clipboardFormat.c_str()));
+
+		IClipFormat *pFormat = m_pClip->Clips()->FindFormatEx(formatId);
 		if (pFormat)
 		{
 			SIZE_T size = ::GlobalSize(pFormat->Data());
@@ -78,12 +80,14 @@ std::string CDittoChaiScript::GetClipMD5(int clipboardFormat)
 	return md5String;
 }
 
-SIZE_T CDittoChaiScript::GetClipSize(int clipboardFormat)
+SIZE_T CDittoChaiScript::GetClipSize(std::string clipboardFormat)
 {
 	SIZE_T size = 0;
 	if (m_pClip)
 	{
-		IClipFormat *pFormat = m_pClip->Clips()->FindFormatEx(clipboardFormat);
+		int formatId = GetFormatID(CTextConvert::MultiByteToUnicodeString(clipboardFormat.c_str()));
+
+		IClipFormat *pFormat = m_pClip->Clips()->FindFormatEx(formatId);
 		if (pFormat)
 		{
 			size = ::GlobalSize(pFormat->Data());

+ 2 - 2
DittoChaiScript.h

@@ -16,8 +16,8 @@ public:
 	std::string GetAsciiString();
 	void SetAsciiString(std::string stringVal);
 
-	std::string GetClipMD5(int clipboardFormat);
-	SIZE_T GetClipSize(int clipboardFormat);
+	std::string GetClipMD5(std::string clipboardFormat);
+	SIZE_T GetClipSize(std::string clipboardFormat);
 
 	std::string GetActiveApp() { return m_activeApp; }
 };

+ 72 - 32
ScriptEditor.cpp

@@ -5,6 +5,9 @@
 #include "CP_Main.h"
 #include "ScriptEditor.h"
 #include "afxdialogex.h"
+#include "ChaiScriptOnCopy.h"
+#include "Shared\TextConvert.h"
+#include "DittoChaiScript.h"
 
 
 // CScriptEditor dialog
@@ -37,6 +40,7 @@ BEGIN_MESSAGE_MAP(CScriptEditor, CDialogEx)
 	ON_BN_CLICKED(IDC_CHECK_ACTIVE, &CScriptEditor::OnBnClickedCheckActive)
 	ON_WM_SIZE()
 	ON_BN_CLICKED(IDC_BUTTON_DELETE_SCRIPT, &CScriptEditor::OnBnClickedButtonDeleteScript)
+	ON_BN_CLICKED(IDC_BUTTON_RUN, &CScriptEditor::OnBnClickedButtonRun)
 END_MESSAGE_MAP()
 
 
@@ -63,6 +67,10 @@ BOOL CScriptEditor::OnInitDialog()
 
 		OnLbnSelchangeListScripts();
 	}
+	else
+	{
+		EnableDisable(FALSE);
+	}
 
 	m_resize.SetParent(m_hWnd);	
 	m_resize.AddControl(IDOK, DR_MoveTop | DR_MoveLeft);
@@ -83,8 +91,7 @@ BOOL CScriptEditor::OnInitDialog()
 	m_resize.AddControl(IDC_BUTTON_RUN, DR_MoveTop | DR_MoveLeft);
 
 	m_resize.AddControl(IDC_BUTTON_DELETE_SCRIPT, DR_MoveTop);
-	m_resize.AddControl(IDC_BUTTON_ADD_SCRIPT, DR_MoveTop);
-	
+	m_resize.AddControl(IDC_BUTTON_ADD_SCRIPT, DR_MoveTop);	
 	
 
 	return FALSE;
@@ -92,7 +99,7 @@ BOOL CScriptEditor::OnInitDialog()
 
 void CScriptEditor::OnLbnSelchangeListScripts()
 {
-	int listIndex = m_scriptsList.GetItemData(m_scriptsList.GetCurSel());
+	int listIndex = m_scriptsList.GetCurSel();
 	if (listIndex >= 0 && listIndex < m_xml.m_list.size())
 	{
 		this->SetDlgItemText(IDC_EDIT_NAME, m_xml.m_list[listIndex].m_name);
@@ -119,12 +126,6 @@ void CScriptEditor::OnBnClickedButtonAddScript()
 	m_xml.m_list.push_back(newItem);
 
 	int index = m_scriptsList.AddString(newItem.m_name);
-	{
-		int y = m_xml.m_list.size() - 1;
-		m_scriptsList.SetItemData(index, y);// );
-	}
-
-	int t = m_scriptsList.GetItemData(index);
 
 	m_scriptsList.SetSel(index);
 	m_scriptsList.SetCurSel(index);
@@ -137,12 +138,13 @@ void CScriptEditor::OnBnClickedButtonAddScript()
 	this->CheckDlgButton(IDC_CHECK_ACTIVE, BST_CHECKED);
 
 	this->GetDlgItem(IDC_EDIT_NAME)->SetFocus();
+
+	EnableDisable(TRUE);
 }
 
 void CScriptEditor::OnEnKillfocusEditName()
 {
-	int selectedRow = m_scriptsList.GetCurSel();
-	int listIndex = m_scriptsList.GetItemData(selectedRow);
+	int listIndex = m_scriptsList.GetCurSel();
 	if (listIndex >= 0 && listIndex < m_xml.m_list.size())
 	{
 		CString name;
@@ -154,14 +156,12 @@ void CScriptEditor::OnEnKillfocusEditName()
 
 			m_scriptsList.SetRedraw(FALSE);
 
-			int itemData = m_scriptsList.GetItemData(selectedRow);
-			m_scriptsList.DeleteString(selectedRow);
-			m_scriptsList.InsertString(selectedRow, name);
-			m_scriptsList.SetItemData(selectedRow, itemData);
-			m_scriptsList.SetSel(selectedRow);
-			m_scriptsList.SetCurSel(selectedRow);
-			m_scriptsList.SetCaretIndex(selectedRow);
-			m_scriptsList.SetAnchorIndex(selectedRow);
+			m_scriptsList.DeleteString(listIndex);
+			m_scriptsList.InsertString(listIndex, name);
+			m_scriptsList.SetSel(listIndex);
+			m_scriptsList.SetCurSel(listIndex);
+			m_scriptsList.SetCaretIndex(listIndex);
+			m_scriptsList.SetAnchorIndex(listIndex);
 			m_scriptsList.SetRedraw(TRUE);
 			m_scriptsList.UpdateWindow();
 		}	
@@ -170,7 +170,7 @@ void CScriptEditor::OnEnKillfocusEditName()
 
 void CScriptEditor::OnEnKillfocusEditDesc()
 {
-	int listIndex = m_scriptsList.GetItemData(m_scriptsList.GetCurSel());
+	int listIndex = m_scriptsList.GetCurSel();
 	if (listIndex >= 0 && listIndex < m_xml.m_list.size())
 	{
 		CString desc;
@@ -181,7 +181,7 @@ void CScriptEditor::OnEnKillfocusEditDesc()
 
 void CScriptEditor::OnEnKillfocusEditScript()
 {
-	int listIndex = m_scriptsList.GetItemData(m_scriptsList.GetCurSel());
+	int listIndex = m_scriptsList.GetCurSel();
 	if (listIndex >= 0 && listIndex < m_xml.m_list.size())
 	{
 		CString script;
@@ -192,7 +192,7 @@ void CScriptEditor::OnEnKillfocusEditScript()
 
 void CScriptEditor::OnBnClickedCheckActive()
 {
-	int listIndex = m_scriptsList.GetItemData(m_scriptsList.GetCurSel());
+	int listIndex = m_scriptsList.GetCurSel();
 	if (listIndex >= 0 && listIndex < m_xml.m_list.size())
 	{
 		if (this->IsDlgButtonChecked(IDC_CHECK_ACTIVE) == BST_CHECKED)
@@ -216,26 +216,66 @@ void CScriptEditor::OnSize(UINT nType, int cx, int cy)
 
 void CScriptEditor::OnBnClickedButtonDeleteScript()
 {
-	int row = m_scriptsList.GetCurSel();
-	int listIndex = m_scriptsList.GetItemData(row);
+	int listIndex = m_scriptsList.GetCurSel();
 	if (listIndex >= 0 && listIndex < m_xml.m_list.size())
 	{
 		m_xml.m_list.erase(m_xml.m_list.begin() + listIndex);
-		m_scriptsList.DeleteString(row);
+		m_scriptsList.DeleteString(listIndex);
 
-		if (m_scriptsList.GetCount() <= row)
+		if (m_scriptsList.GetCount() <= listIndex)
 		{
-			row--;
+			listIndex--;
 		}
 
-		if (row >= 0)
+		if (listIndex >= 0)
 		{
-			m_scriptsList.SetSel(row);
-			m_scriptsList.SetCurSel(row);
-			m_scriptsList.SetCaretIndex(row);
-			m_scriptsList.SetAnchorIndex(row);
+			m_scriptsList.SetSel(listIndex);
+			m_scriptsList.SetCurSel(listIndex);
+			m_scriptsList.SetCaretIndex(listIndex);
+			m_scriptsList.SetAnchorIndex(listIndex);
 
 			OnLbnSelchangeListScripts();
 		}
+		else
+		{
+			EnableDisable(FALSE);
+		}
+	}
+}
+
+void CScriptEditor::EnableDisable(BOOL enable)
+{
+	::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT_NAME), enable);
+	::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT_DESC), enable);
+	::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT_SCRIPT), enable);
+	::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT_INPUT), enable);
+	::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT_OUTPUT), enable);
+	::EnableWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_RUN), enable);
+}
+
+
+void CScriptEditor::OnBnClickedButtonRun()
+{
+	CWaitCursor wait;
+
+	CString input;
+	GetDlgItemText(IDC_EDIT_INPUT, input);
+	CString script;
+	GetDlgItemText(IDC_EDIT_SCRIPT, script);
+
+	CClip clip;
+	ChaiScriptOnCopy test;
+	CDittoChaiScript clipData(&clip, "");
+	clipData.SetAsciiString((LPCSTR)CTextConvert::UnicodeStringToMultiByte(input));
+	
+	test.ProcessScript(clipData, (LPCSTR)CTextConvert::UnicodeStringToMultiByte(script));
+
+	if (test.m_lastError == _T(""))
+	{
+		SetDlgItemText(IDC_EDIT_OUTPUT, _T("returned false"));
+	}
+	else
+	{
+		SetDlgItemText(IDC_EDIT_OUTPUT, test.m_lastError);
 	}
 }

+ 2 - 0
ScriptEditor.h

@@ -18,6 +18,7 @@ public:
 
 protected:
 	
+	void EnableDisable(BOOL enable);
 
 // Dialog Data
 #ifdef AFX_DESIGN_TIME
@@ -40,4 +41,5 @@ public:
 	afx_msg void OnBnClickedCheckActive();
 	afx_msg void OnSize(UINT nType, int cx, int cy);
 	afx_msg void OnBnClickedButtonDeleteScript();
+	afx_msg void OnBnClickedButtonRun();
 };