Browse Source

- added shortcuts to manipulate transparency
- toggle transparency
- increase/decrease transparency
- show clip group path in tooltip and description

Scott Brogden 7 years ago
parent
commit
b57785e719
12 changed files with 475 additions and 88 deletions
  1. 36 0
      ActionEnums.cpp
  2. 12 0
      ActionEnums.h
  3. 5 0
      CP_Main.rc
  4. 2 2
      DittoSetup/BuildDitto.bld
  5. 35 0
      Misc.cpp
  6. 2 0
      Misc.h
  7. 9 1
      QListCtrl.cpp
  8. 317 81
      QPasteWnd.cpp
  9. 19 0
      QPasteWnd.h
  10. 5 1
      Resource.h
  11. 30 3
      ToolTipEx.cpp
  12. 3 0
      ToolTipEx.h

+ 36 - 0
ActionEnums.cpp

@@ -311,6 +311,42 @@ CString ActionEnums::EnumDescription(ActionEnumValues value)
 	case PASTE_TRIM_WHITE_SPACE:
 		val = "Paste, Trim White Space";
 		break;
+	case TRANSPARENCY_NONE:
+		val = "Set Transparency None";
+		break;
+	case TRANSPARENCY_5:
+		val = "Set Transparency 5%";
+		break;
+	case TRANSPARENCY_10:
+		val = "Set Transparency 10%";
+		break;
+	case TRANSPARENCY_15:
+		val = "Set Transparency 15%";
+		break;
+	case TRANSPARENCY_20:
+		val = "Set Transparency 20%";
+		break;
+	case TRANSPARENCY_25:
+		val = "Set Transparency 25%";
+		break;
+	case TRANSPARENCY_30:
+		val = "Set Transparency 30%";
+		break;
+	case TRANSPARENCY_35:
+		val = "Set Transparency 35%";
+		break;
+	case TRANSPARENCY_40:
+		val = "Set Transparency 40%";
+		break;
+	case TRANSPARENCY_TOGGLE:
+		val = "Toggle Transparency Enabled";
+		break;
+	case TRANSPARENCY_INCREASE:
+		val = "Increase Transparency %";
+		break;
+	case TRANSPARENCY_DECREASE:
+		val = "Decrease Transparency %";
+		break;
 	}
 
 	CString translatedValue = theApp.m_Language.GetQuickPasteKeyboardString(value, val);

+ 12 - 0
ActionEnums.h

@@ -105,6 +105,18 @@ public:
 		MOVE_CLIP_LAST,
 		PASTE_DONT_MOVE_CLIP,
 		PASTE_TRIM_WHITE_SPACE,
+		TRANSPARENCY_NONE,
+		TRANSPARENCY_5,
+		TRANSPARENCY_10,
+		TRANSPARENCY_15,
+		TRANSPARENCY_20,
+		TRANSPARENCY_25,
+		TRANSPARENCY_30,
+		TRANSPARENCY_35,
+		TRANSPARENCY_40,
+		TRANSPARENCY_TOGGLE,
+		TRANSPARENCY_INCREASE,
+		TRANSPARENCY_DECREASE,
 
 		LAST_ACTION
 	};

+ 5 - 0
CP_Main.rc

@@ -385,7 +385,12 @@ BEGIN
                 MENUITEM "20 %",                        32796
                 MENUITEM "25 %",                        32798
                 MENUITEM "30 %",                        32799
+                MENUITEM "35 %",                        ID_TRANSPARENCY_35
                 MENUITEM "40 %",                        32790
+                MENUITEM SEPARATOR
+                MENUITEM "Increase",                    ID_TRANSPARENCY_INCREASE
+                MENUITEM "Decrease",                    ID_TRANSPARENCY_DECREASE
+                MENUITEM "Toggle Enabled",              ID_TRANSPARENCY_TOGGLE
             END
             POPUP "Positioning"
             BEGIN

+ 2 - 2
DittoSetup/BuildDitto.bld

@@ -471,7 +471,7 @@ header("Pragma: no-cache");
 
 <br>
 
-<a href="AllFiles.php">Previous Builds</a><br>
+<a href="./files/">Previous Builds</a><br>
 <br>
 
 <a href="changes.php">Change Log since last release 9-7-2017</a><br>
@@ -532,7 +532,7 @@ var sc_security="b3f57099";
 			<Port>22</Port>
 			<Retries>0</Retries>
 			<Server>web.sourceforge.net</Server>
-			<ServerPath>/home/groups/d/di/ditto-cp/htdocs/beta</ServerPath>
+			<ServerPath>/home/groups/d/di/ditto-cp/htdocs/beta/files</ServerPath>
 			<Timeout>30</Timeout>
 			<TransferType type='3'>1</TransferType>
 			<UserName>sabrogden,ditto-cp</UserName>

+ 35 - 0
Misc.cpp

@@ -1438,4 +1438,39 @@ CString NewGuidString()
 		guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
 
 	return guidString;
+}
+
+CString FolderPath(int folderId)
+{
+	CString folder = _T("");
+	if (folderId > 0)
+	{
+		try
+		{
+			CStringArray arr;
+			for (int i = 0; i < 100; i++)
+			{
+				CppSQLite3Query parent = theApp.m_db.execQueryEx(_T("SELECT lID, mText, lParentID FROM Main WHERE lID = %d"), folderId);
+				if (parent.eof() == false)
+				{
+					arr.Add(parent.getStringField(_T("mText")));
+					folderId = parent.getIntField(_T("lParentID"));
+				}
+				else
+				{
+					break;
+				}
+			}
+
+			folder = _T("Group Path: \\");
+			for (int folderPos = arr.GetCount() - 1; folderPos >= 0; folderPos--)
+			{
+				folder += _T("\\");
+				folder += arr[folderPos];
+			}
+		}
+		CATCH_SQLITE_EXCEPTION
+	}
+
+	return folder;
 }

+ 2 - 0
Misc.h

@@ -193,4 +193,6 @@ bool RemoveRTFSection(CStringA &str, CStringA section);
 
 CString NewGuidString();
 
+CString FolderPath(int folderId);
+
 #endif // !defined(AFX_CP_GUI_GLOBALS__FBCDED09_A6F2_47EB_873F_50A746EBC86B__INCLUDED_)

+ 9 - 1
QListCtrl.cpp

@@ -1020,7 +1020,7 @@ bool CQListCtrl::ShowFullDescription(bool bFromAuto, bool fromNextPrev)
 
 		try
 		{
-			CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID, lDate, lastPasteDate, lDontAutoDelete, QuickPasteText, lShortCut, globalShortCut, stickyClipOrder, stickyClipGroupOrder FROM Main WHERE lID = %d"), clipId);
+			CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID, lDate, lastPasteDate, lDontAutoDelete, QuickPasteText, lShortCut, globalShortCut, stickyClipOrder, stickyClipGroupOrder, lParentID FROM Main WHERE lID = %d"), clipId);
 			if (q.eof() == false)
 			{
 				CString clipData;
@@ -1074,6 +1074,14 @@ bool CQListCtrl::ShowFullDescription(bool bFromAuto, bool fromNextPrev)
 					}
 				}
 
+				int parentId = q.getIntField(_T("lParentID"));
+				if (parentId > 0)
+				{					
+					CString folder = FolderPath(parentId);
+
+					m_pToolTip->SetFolderPath(folder);
+				}
+
 				m_pToolTip->SetClipData(clipData);
 			}
 		}

+ 317 - 81
QPasteWnd.cpp

@@ -309,6 +309,22 @@ ON_COMMAND(ID_SPECIALPASTE_PASTE32945, &CQPasteWnd::OnSpecialpastePasteDontUpdat
 ON_UPDATE_COMMAND_UI(ID_SPECIALPASTE_PASTE32945, &CQPasteWnd::OnUpdateOnSpecialPasteDontUpdateOrder)
 ON_COMMAND(ID_SPECIALPASTE_TRIM, &CQPasteWnd::OnSpecialpasteTrim)
 ON_UPDATE_COMMAND_UI(ID_SPECIALPASTE_TRIM, &CQPasteWnd::OnUpdateSpecialpasteTrim)
+ON_COMMAND(ID_TRANSPARENCY_INCREASE, &CQPasteWnd::OnTransparencyIncrease)
+ON_UPDATE_COMMAND_UI(ID_TRANSPARENCY_INCREASE, &CQPasteWnd::OnUpdateTransparencyIncrease)
+ON_COMMAND(ID_TRANSPARENCY_DECREASE, &CQPasteWnd::OnTransparencyDecrease)
+ON_UPDATE_COMMAND_UI(ID_TRANSPARENCY_DECREASE, &CQPasteWnd::OnUpdateTransparencyDecrease)
+ON_COMMAND(ID_TRANSPARENCY_TOGGLE, &CQPasteWnd::OnTransparencyToggle)
+ON_UPDATE_COMMAND_UI(ID_TRANSPARENCY_TOGGLE, &CQPasteWnd::OnUpdateTransparencyToggle)
+ON_UPDATE_COMMAND_UI(ID_MENU_TRANSPARENCY_NONE, &CQPasteWnd::OnUpdateTransparencyNone)
+ON_UPDATE_COMMAND_UI(ID_MENU_TRANSPARENCY_5, &CQPasteWnd::OnUpdateTransparency5)
+ON_UPDATE_COMMAND_UI(ID_MENU_TRANSPARENCY_10, &CQPasteWnd::OnUpdateTransparency10)
+ON_UPDATE_COMMAND_UI(ID_MENU_TRANSPARENCY_15, &CQPasteWnd::OnUpdateTransparency15)
+ON_UPDATE_COMMAND_UI(ID_MENU_TRANSPARENCY_20, &CQPasteWnd::OnUpdateTransparency20)
+ON_UPDATE_COMMAND_UI(ID_MENU_TRANSPARENCY_25, &CQPasteWnd::OnUpdateTransparency25)
+ON_UPDATE_COMMAND_UI(ID_MENU_TRANSPARENCY_30, &CQPasteWnd::OnUpdateTransparency30)
+ON_UPDATE_COMMAND_UI(ID_TRANSPARENCY_35, &CQPasteWnd::OnUpdateTransparency35)
+ON_UPDATE_COMMAND_UI(ID_MENU_TRANSPARENCY_40, &CQPasteWnd::OnUpdateTransparency40)
+ON_COMMAND(ID_TRANSPARENCY_35, &CQPasteWnd::OnTransparency35)
 END_MESSAGE_MAP()
 
 
@@ -1598,6 +1614,9 @@ void CQPasteWnd::SetMenuChecks(CMenu *pMenu)
             case 30:
                 nCheckID = ID_MENU_TRANSPARENCY_30;
                 break;
+			case 35:
+				nCheckID = ID_TRANSPARENCY_35;
+				break;
             case 40:
                 nCheckID = ID_MENU_TRANSPARENCY_40;
                 break;
@@ -1893,83 +1912,6 @@ void CQPasteWnd::SetLinesPerRow(int lines, bool force, bool resetListCount)
 	}
 }
 
-void CQPasteWnd::OnMenuTransparencyNone()
-{
-    SetTransparency(0);
-}
-
-void CQPasteWnd::OnMenuTransparency5()
-{
-    SetTransparency(5);
-}
-
-void CQPasteWnd::OnMenuTransparency10()
-{
-    SetTransparency(10);
-}
-
-void CQPasteWnd::OnMenuTransparency15()
-{
-    SetTransparency(15);
-}
-
-void CQPasteWnd::OnMenuTransparency20()
-{
-    SetTransparency(20);
-}
-
-void CQPasteWnd::OnMenuTransparency25()
-{
-    SetTransparency(25);
-}
-
-void CQPasteWnd::OnMenuTransparency30()
-{
-    SetTransparency(30);
-}
-
-void CQPasteWnd::OnMenuTransparency40()
-{
-    SetTransparency(40);
-}
-
-void CQPasteWnd::SetTransparency(int percent)
-{
-    if(percent)
-    {
-        CGetSetOptions::SetTransparencyPercent(percent);
-        CGetSetOptions::SetEnableTransparency(TRUE);
-
-        m_Alpha.SetTransparent(TRUE);
-
-        float fPercent = percent / (float)100.0;
-
-        m_Alpha.SetOpacity(OPACITY_MAX - (int)(fPercent *OPACITY_MAX));
-    }
-    else
-    {
-        CGetSetOptions::SetEnableTransparency(FALSE);
-        m_Alpha.SetTransparent(FALSE);
-    }
-}
-
-void CQPasteWnd::SetCurrentTransparency()
-{
-	//Set the transparency
-	if (CGetSetOptions::GetEnableTransparency())
-	{
-		m_Alpha.SetTransparent(TRUE);
-
-		float fPercent = CGetSetOptions::GetTransparencyPercent() / (float)100.0;
-
-		m_Alpha.SetOpacity(OPACITY_MAX - (int)(fPercent *OPACITY_MAX));
-	}
-	else
-	{
-		m_Alpha.SetTransparent(FALSE);
-	}
-}
-
 void CQPasteWnd::OnMenuDelete()
 {
     DeleteSelectedRows();
@@ -3218,6 +3160,43 @@ bool CQPasteWnd::DoAction(CAccel a)
 	case ActionEnums::PASTE_TRIM_WHITE_SPACE:
 		ret = DoActionPasteTrimWhiteSpace();
 		break;
+
+	case ActionEnums::TRANSPARENCY_NONE:
+		SetTransparency(0);
+		break;
+	case ActionEnums::TRANSPARENCY_5:
+		SetTransparency(5);
+		break;
+	case ActionEnums::TRANSPARENCY_10:
+		SetTransparency(10);
+		break;
+	case ActionEnums::TRANSPARENCY_15:
+		SetTransparency(15);
+		break;
+	case ActionEnums::TRANSPARENCY_20:
+		SetTransparency(20);
+		break;
+	case ActionEnums::TRANSPARENCY_25:
+		SetTransparency(25);
+		break;
+	case ActionEnums::TRANSPARENCY_30:
+		SetTransparency(30);
+		break;
+	case ActionEnums::TRANSPARENCY_35:
+		SetTransparency(35);
+		break;
+	case ActionEnums::TRANSPARENCY_40:
+		SetTransparency(40);
+		break;
+	case ActionEnums::TRANSPARENCY_TOGGLE:
+		DoActionToggleTransparency();
+		break;
+	case ActionEnums::TRANSPARENCY_INCREASE:
+		DoActionIncreaseTransparency();
+		break;
+	case ActionEnums::TRANSPARENCY_DECREASE:
+		DoActionDecreaseTransparency();
+		break;
 	}
 
 	return ret;
@@ -5340,7 +5319,7 @@ void CQPasteWnd::OnGetToolTipText(NMHDR *pNMHDR, LRESULT *pResult)
         CString cs;
 
         int id = m_lstHeader.GetItemData(pInfo->lItem);
-        CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID, mText, lDate, lShortCut, clipOrder, clipGroupOrder, stickyClipOrder, stickyClipGroupOrder, lDontAutoDelete, QuickPasteText, lastPasteDate, globalShortCut FROM Main WHERE lID = %d"), id);
+        CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID, mText, lDate, lShortCut, clipOrder, clipGroupOrder, stickyClipOrder, stickyClipGroupOrder, lDontAutoDelete, QuickPasteText, lastPasteDate, globalShortCut, lParentID FROM Main WHERE lID = %d"), id);
         if(q.eof() == false)
         {
             cs = q.getStringField(1);
@@ -5374,7 +5353,7 @@ void CQPasteWnd::OnGetToolTipText(NMHDR *pNMHDR, LRESULT *pResult)
             int shortCut = q.getIntField(_T("lShortCut"));
             if(shortCut > 0)
             {
-                cs += "\n\n";
+                cs += "\r\n";
                 cs += CHotKey::GetHotKeyDisplayStatic(shortCut);
 
 				BOOL globalShortCut = q.getIntField(_T("globalShortCut"));
@@ -5389,7 +5368,7 @@ void CQPasteWnd::OnGetToolTipText(NMHDR *pNMHDR, LRESULT *pResult)
 				int sticky = q.getIntField(_T("stickyClipGroupOrder"));
 				if (sticky != INVALID_STICKY)
 				{
-					cs += "\n\n";
+					cs += "\r\n";
 					cs += _T(" - Sticky In Group");
 				}
 			}
@@ -5398,10 +5377,17 @@ void CQPasteWnd::OnGetToolTipText(NMHDR *pNMHDR, LRESULT *pResult)
 				int sticky = q.getIntField(_T("stickyClipOrder"));
 				if (sticky != INVALID_STICKY)
 				{
-					cs += "\n\n";
+					cs += "\r\n";
 					cs += _T(" - Sticky");
 				}
 			}
+
+			int parentId = q.getIntField(_T("lParentID"));
+			if (parentId > 0)
+			{
+				cs += "\r\n";
+				cs += FolderPath(parentId);
+			}
         }
 
         lstrcpyn(pInfo->pszText, cs, pInfo->cchTextMax);
@@ -6872,3 +6858,253 @@ void CQPasteWnd::OnUpdateSpecialpasteTrim(CCmdUI *pCmdUI)
 
 	UpdateMenuShortCut(pCmdUI, ActionEnums::PASTE_TRIM_WHITE_SPACE);
 }
+
+void CQPasteWnd::OnMenuTransparencyNone()
+{
+	DoAction(ActionEnums::TRANSPARENCY_NONE);
+}
+
+void CQPasteWnd::OnUpdateTransparencyNone(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_NONE);
+}
+
+void CQPasteWnd::OnMenuTransparency5()
+{
+	DoAction(ActionEnums::TRANSPARENCY_5);
+}
+
+void CQPasteWnd::OnUpdateTransparency5(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_5);
+}
+
+void CQPasteWnd::OnMenuTransparency10()
+{
+	DoAction(ActionEnums::TRANSPARENCY_10);
+}
+
+void CQPasteWnd::OnUpdateTransparency10(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_10);
+}
+
+void CQPasteWnd::OnMenuTransparency15()
+{
+	DoAction(ActionEnums::TRANSPARENCY_15);
+}
+
+void CQPasteWnd::OnUpdateTransparency15(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_15);
+}
+
+void CQPasteWnd::OnMenuTransparency20()
+{
+	DoAction(ActionEnums::TRANSPARENCY_20);
+}
+
+void CQPasteWnd::OnUpdateTransparency20(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_20);
+}
+
+void CQPasteWnd::OnMenuTransparency25()
+{
+	DoAction(ActionEnums::TRANSPARENCY_25);
+}
+
+void CQPasteWnd::OnUpdateTransparency25(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_25);
+}
+
+void CQPasteWnd::OnMenuTransparency30()
+{
+	DoAction(ActionEnums::TRANSPARENCY_30);
+}
+
+void CQPasteWnd::OnUpdateTransparency30(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_30);
+}
+
+void CQPasteWnd::OnTransparency35()
+{
+	DoAction(ActionEnums::TRANSPARENCY_35);
+}
+
+void CQPasteWnd::OnUpdateTransparency35(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_35);
+}
+
+void CQPasteWnd::OnMenuTransparency40()
+{
+	DoAction(ActionEnums::TRANSPARENCY_40);
+}
+
+void CQPasteWnd::OnUpdateTransparency40(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_40);
+}
+
+bool CQPasteWnd::DoActionToggleTransparency()
+{
+	CGetSetOptions::SetEnableTransparency(!CGetSetOptions::GetEnableTransparency());
+	SetCurrentTransparency();
+
+	return true;
+}
+
+bool CQPasteWnd::DoActionIncreaseTransparency()
+{
+	int current = CGetSetOptions::GetTransparencyPercent();
+	current += 5;
+	current = min(current, 100);
+	SetTransparency(current);
+
+	return true;
+}
+
+bool CQPasteWnd::DoActionDecreaseTransparency()
+{
+	int current = CGetSetOptions::GetTransparencyPercent();
+	current -= 5;
+	current = max(current, 0);
+	SetTransparency(current);
+
+	return true;
+}
+
+void CQPasteWnd::SetTransparency(int percent)
+{
+	if (percent > 0)
+	{
+		CGetSetOptions::SetTransparencyPercent(percent);
+		CGetSetOptions::SetEnableTransparency(TRUE);
+
+		m_Alpha.SetTransparent(TRUE);
+
+		float fPercent = percent / (float)100.0;
+
+		m_Alpha.SetOpacity(OPACITY_MAX - (int)(fPercent *OPACITY_MAX));
+	}
+	else
+	{
+		CGetSetOptions::SetEnableTransparency(FALSE);
+		m_Alpha.SetTransparent(FALSE);
+	}
+}
+
+void CQPasteWnd::SetCurrentTransparency()
+{
+	//Set the transparency
+	if (CGetSetOptions::GetEnableTransparency())
+	{
+		m_Alpha.SetTransparent(TRUE);
+
+		float fPercent = CGetSetOptions::GetTransparencyPercent() / (float)100.0;
+
+		m_Alpha.SetOpacity(OPACITY_MAX - (int)(fPercent *OPACITY_MAX));
+	}
+	else
+	{
+		m_Alpha.SetTransparent(FALSE);
+	}
+}
+
+void CQPasteWnd::OnTransparencyIncrease()
+{
+	DoAction(ActionEnums::TRANSPARENCY_INCREASE);
+}
+
+
+void CQPasteWnd::OnUpdateTransparencyIncrease(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_INCREASE);
+}
+
+
+void CQPasteWnd::OnTransparencyDecrease()
+{
+	DoAction(ActionEnums::TRANSPARENCY_DECREASE);
+}
+
+
+void CQPasteWnd::OnUpdateTransparencyDecrease(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_DECREASE);
+}
+
+
+void CQPasteWnd::OnTransparencyToggle()
+{
+	DoAction(ActionEnums::TRANSPARENCY_TOGGLE);
+}
+
+
+void CQPasteWnd::OnUpdateTransparencyToggle(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::TRANSPARENCY_TOGGLE);
+}

+ 19 - 0
QPasteWnd.h

@@ -293,6 +293,9 @@ public:
 	bool DoActionToggleClipboardConnection();
 	bool DoActionPasteDontMoveClip();
 	bool DoActionPasteTrimWhiteSpace();
+	bool DoActionToggleTransparency();
+	bool DoActionIncreaseTransparency();
+	bool DoActionDecreaseTransparency();
 
 	bool OnNewClip();
 	bool OnImportClip();
@@ -538,4 +541,20 @@ public:
 
 	afx_msg void OnSpecialpasteTrim();
 	afx_msg void OnUpdateSpecialpasteTrim(CCmdUI *pCmdUI);
+	afx_msg void OnTransparencyIncrease();
+	afx_msg void OnUpdateTransparencyIncrease(CCmdUI *pCmdUI);
+	afx_msg void OnTransparencyDecrease();
+	afx_msg void OnUpdateTransparencyDecrease(CCmdUI *pCmdUI);
+	afx_msg void OnTransparencyToggle();
+	afx_msg void OnUpdateTransparencyToggle(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparencyNone(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparency5(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparency10(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparency15(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparency20(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparency25(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparency30(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparency35(CCmdUI *pCmdUI);
+	afx_msg void OnUpdateTransparency40(CCmdUI *pCmdUI);
+	afx_msg void OnTransparency35();
 };

+ 5 - 1
Resource.h

@@ -761,6 +761,10 @@
 #define ID_QUICKOPTIONS_                32944
 #define ID_SPECIALPASTE_PASTE32945      32945
 #define ID_SPECIALPASTE_TRIM            32946
+#define ID_TRANSPARENCY_INCREASE        32947
+#define ID_TRANSPARENCY_DECREASE        32948
+#define ID_TRANSPARENCY_TOGGLE          32949
+#define ID_TRANSPARENCY_35              32950
 
 // Next default values for new objects
 // 
@@ -768,7 +772,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        383
-#define _APS_NEXT_COMMAND_VALUE         32947
+#define _APS_NEXT_COMMAND_VALUE         32951
 #define _APS_NEXT_CONTROL_VALUE         2172
 #define _APS_NEXT_SYMED_VALUE           104
 #endif

+ 30 - 3
ToolTipEx.cpp

@@ -119,12 +119,18 @@ BOOL CToolTipEx::Create(CWnd *pParentWnd)
 	m_optionsButton.ShowWindow(SW_SHOW);
 
 	m_clipDataStatic.Create(_T("some text"), WS_CHILD | WS_VISIBLE | SS_SIMPLE, CRect(0, 0, 0, 0), this, 3);
+	m_folderPathStatic.Create(_T("some text"), WS_CHILD | WS_VISIBLE | SS_SIMPLE, CRect(0, 0, 0, 0), this, 4);
 
 	m_clipDataFont.CreateFont(-m_DittoWindow.m_dpi.Scale(11), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
+
 	m_clipDataStatic.SetFont(&m_clipDataFont);
 	m_clipDataStatic.SetBkColor(g_Opt.m_Theme.DescriptionWindowBG());
 	m_clipDataStatic.SetTextColor(RGB(80, 80, 80));
 
+	m_folderPathStatic.SetFont(&m_clipDataFont);
+	m_folderPathStatic.SetBkColor(g_Opt.m_Theme.DescriptionWindowBG());
+	m_folderPathStatic.SetTextColor(RGB(80, 80, 80));
+
 	m_saveWindowLockout = false;
 
     return TRUE;
@@ -256,6 +262,7 @@ BOOL CToolTipEx::Show(CPoint point)
 	}
 
 	m_clipDataStatic.SetWindowText(m_clipData);
+	m_folderPathStatic.SetWindowText(m_folderPath);
 
 	if (m_DittoWindow.m_bMinimized)
 	{
@@ -683,7 +690,20 @@ void CToolTipEx::MoveControls()
 {
 	CRect cr;
 	GetClientRect(cr);
-	cr.DeflateRect(0, 0, 0, m_DittoWindow.m_dpi.Scale(21));
+
+	int bottom = 22;
+
+	if (m_folderPath != _T(""))
+	{
+		bottom += m_DittoWindow.m_dpi.Scale(17);
+		m_folderPathStatic.ShowWindow(SW_SHOW);			}
+	else
+	{
+		m_folderPathStatic.ShowWindow(SW_HIDE);
+	}
+
+	cr.DeflateRect(0, 0, 0, bottom);
+
 	m_RichEdit.MoveWindow(cr);
 	m_imageViewer.MoveWindow(cr);
 	if (::IsWindow(m_browser.m_hWnd))
@@ -693,7 +713,9 @@ void CToolTipEx::MoveControls()
 
 	m_optionsButton.MoveWindow(cr.left, cr.bottom + m_DittoWindow.m_dpi.Scale(3), m_DittoWindow.m_dpi.Scale(17), m_DittoWindow.m_dpi.Scale(17));
 
-	m_clipDataStatic.MoveWindow(cr.left + m_DittoWindow.m_dpi.Scale(19), cr.bottom + m_DittoWindow.m_dpi.Scale(4), cr.Width() - cr.left + m_DittoWindow.m_dpi.Scale(19), m_DittoWindow.m_dpi.Scale(17));
+	m_clipDataStatic.MoveWindow(cr.left + m_DittoWindow.m_dpi.Scale(19), cr.bottom + m_DittoWindow.m_dpi.Scale(4), cr.Width() - cr.left + m_DittoWindow.m_dpi.Scale(19), m_DittoWindow.m_dpi.Scale(20));
+
+	m_folderPathStatic.MoveWindow(cr.left + m_DittoWindow.m_dpi.Scale(19), cr.bottom + m_DittoWindow.m_dpi.Scale(20), cr.Width() - cr.left + m_DittoWindow.m_dpi.Scale(19), m_DittoWindow.m_dpi.Scale(20));
 
 	this->Invalidate();
 
@@ -742,7 +764,7 @@ void CToolTipEx::SetHtmlText(const CString &html)
 
 		CString colorHex;
 		colorHex.Format(_T("#%02X%02X%02X"), dwR, dwG, dwB);
-
+		
 		m_html.Replace(_T("<body>"), StrF(_T("<body bgcolor=\"%s\">"), colorHex));
 
 		m_browser.PutSilent(true);
@@ -1273,10 +1295,15 @@ LRESULT CToolTipEx::OnDpiChanged(WPARAM wParam, LPARAM lParam)
 
 	m_clipDataFont.Detach();
 	m_clipDataFont.CreateFont(-m_DittoWindow.m_dpi.Scale(8), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
+	
 	m_clipDataStatic.SetFont(&m_clipDataFont);
 	m_clipDataStatic.SetBkColor(g_Opt.m_Theme.DescriptionWindowBG());
 	m_clipDataStatic.SetTextColor(RGB(80, 80, 80));
 
+	m_folderPathStatic.SetFont(&m_clipDataFont);
+	m_folderPathStatic.SetBkColor(g_Opt.m_Theme.DescriptionWindowBG());
+	m_folderPathStatic.SetTextColor(RGB(80, 80, 80));
+
 	LOGFONT lf;
 	m_Font.GetLogFont(&lf);
 	lf.lfHeight = m_DittoWindow.m_dpi.Scale(m_fontHeight);

+ 3 - 0
ToolTipEx.h

@@ -42,6 +42,7 @@ public:
 	void SetSearchText(CString text) { m_searchText = text; }
 
 	void SetClipData(CString data) { m_clipData = data; }
+	void SetFolderPath(CString path) { m_folderPath = path; }
 
 	bool GetShowPersistant() { return m_showPersistant; }
 	void ToggleShowPersistant() { OnFirstAlwaysontop(); }
@@ -90,6 +91,7 @@ protected:
 	CDittoWindow m_DittoWindow;
 	CImageViewer m_imageViewer;
 	CGroupStatic m_clipDataStatic;
+	CGroupStatic m_folderPathStatic;
 	CString m_clipData;
 	CFont m_clipDataFont;
 	bool m_saveWindowLockout;
@@ -99,6 +101,7 @@ protected:
 	bool m_bMaxSetTimer;
 	int m_lDelayMaxSeconds;
 	SnapWindow m_snap;
+	CString m_folderPath;
 
 protected:
 	CString GetFieldFromString(CString ref, int nIndex, TCHAR ch);