Переглянути джерело

added option to keep description window open on mouse selection in the clip list

ScottBrogden 9 роки тому
батько
коміт
dc7222656e
10 змінених файлів з 418 додано та 376 видалено
  1. 11 0
      CP_Main.rc
  2. 54 18
      CP_Main.vcxproj.filters
  3. 284 284
      GroupTree.cpp
  4. 10 0
      Options.cpp
  5. 3 0
      Options.h
  6. 32 60
      QPasteWnd.cpp
  7. 0 2
      QPasteWnd.h
  8. 2 1
      Resource.h
  9. 21 11
      ToolTipEx.cpp
  10. 1 0
      ToolTipEx.h

+ 11 - 0
CP_Main.rc

@@ -327,6 +327,7 @@ BEGIN
         MENUITEM "Remember window position",    ID_FIRST_REMEMBERWINDOWPOSITION
         MENUITEM "Size window to content",      ID_FIRST_SIZEWINDOWTOCONTENT
         MENUITEM "Scale images to fit window",  ID_FIRST_SCALEIMAGESTOFITWINDOW
+        MENUITEM "Hide description window on mouse clip selection", ID_FIRST_HIDEDESCRIPTIONWINDOWONM
     END
 END
 
@@ -346,6 +347,16 @@ BEGIN
     BEGIN
         MENUITEM "Help",                        32842
         MENUITEM SEPARATOR
+        POPUP "Search Options"
+        BEGIN
+            MENUITEM "Search Description",          ID_MENU_SEARCHDESCRIPTION
+            MENUITEM "Search Full Text",            ID_MENU_SEARCHFULLTEXT
+            MENUITEM "Search Quick Paste",          ID_MENU_SEARCHQUICKPASTE
+            MENUITEM SEPARATOR
+            MENUITEM "Contains Text Search",        ID_MENU_CONTAINSTEXTSEARCHONLY
+            MENUITEM "Regular Expression Search",   ID_MENU_REGULAREXPRESSIONSEARCH
+            MENUITEM "Wildcard Search",             ID_MENU_WILDCARDSEARCH
+        END
         MENUITEM "Options...",                  32805
         POPUP "Quick Options"
         BEGIN

+ 54 - 18
CP_Main.vcxproj.filters

@@ -397,11 +397,21 @@
     <ClCompile Include="SpecialPasteOptions.cpp">
       <Filter>source</Filter>
     </ClCompile>
-    <ClCompile Include="PowerManager.cpp" />
-    <ClCompile Include="QuickPasteKeyboard.cpp" />
-    <ClCompile Include="NTray.cpp" />
-    <ClCompile Include="ScrollHelper.cpp" />
-    <ClCompile Include="ImageViewer.cpp" />
+    <ClCompile Include="ScrollHelper.cpp">
+      <Filter>source</Filter>
+    </ClCompile>
+    <ClCompile Include="QuickPasteKeyboard.cpp">
+      <Filter>source</Filter>
+    </ClCompile>
+    <ClCompile Include="PowerManager.cpp">
+      <Filter>source</Filter>
+    </ClCompile>
+    <ClCompile Include="ImageViewer.cpp">
+      <Filter>source</Filter>
+    </ClCompile>
+    <ClCompile Include="NTray.cpp">
+      <Filter>source</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="sqlite\CppSQLite3.h">
@@ -851,11 +861,21 @@
     <ClInclude Include="TrayWnd.h">
       <Filter>header</Filter>
     </ClInclude>
-    <ClInclude Include="PowerManager.h" />
-    <ClInclude Include="QuickPasteKeyboard.h" />
-    <ClInclude Include="NTray.h" />
-    <ClInclude Include="ScrollHelper.h" />
-    <ClInclude Include="ImageViewer.h" />
+    <ClInclude Include="ImageViewer.h">
+      <Filter>header</Filter>
+    </ClInclude>
+    <ClInclude Include="PowerManager.h">
+      <Filter>header</Filter>
+    </ClInclude>
+    <ClInclude Include="QuickPasteKeyboard.h">
+      <Filter>header</Filter>
+    </ClInclude>
+    <ClInclude Include="ScrollHelper.h">
+      <Filter>header</Filter>
+    </ClInclude>
+    <ClInclude Include="NTray.h">
+      <Filter>header</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="CP_Main.rc">
@@ -1126,15 +1146,31 @@
     <None Include="res\yellow_star_32_32.png">
       <Filter>res</Filter>
     </None>
-    <None Include="res\Hamburger_16_16.png" />
-    <None Include="res\Hamburger_20_20.png" />
-    <None Include="res\Hamburger_24_24.png" />
-    <None Include="res\Hamburger_32_32.png" />
-    <None Include="res\system_menu_16_16.png" />
-    <None Include="res\system_menu_20_20.png" />
-    <None Include="res\system_menu_24_24.png" />
-    <None Include="res\system_menu_32_32.png" />
     <None Include="CP_Main.rgs" />
+    <None Include="res\Hamburger_16_16.png">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\Hamburger_20_20.png">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\Hamburger_24_24.png">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\Hamburger_32_32.png">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\system_menu_16_16.png">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\system_menu_20_20.png">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\system_menu_24_24.png">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\system_menu_32_32.png">
+      <Filter>res</Filter>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <Filter Include="sqlite">

+ 284 - 284
GroupTree.cpp

@@ -1,43 +1,43 @@
-// GroupTree.cpp : implementation file
-//
-
-#include "stdafx.h"
-#include "cp_main.h"
-#include "GroupTree.h"
-#include "ActionEnums.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// CGroupTree
-
-CGroupTree::CGroupTree()
-{
-	m_bHide = true;
-	m_selectedFolderID = -1;
-	m_bSendAllready = false;
-}
-
-CGroupTree::~CGroupTree()
-{
-}
-
-
-BEGIN_MESSAGE_MAP(CGroupTree, CTreeCtrl)
-	//{{AFX_MSG_MAP(CGroupTree)
-	ON_WM_CREATE()
-	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
-	ON_NOTIFY_REFLECT(NM_RCLICK, OnRclickQuickPaste)
-	ON_WM_KILLFOCUS()
-	ON_WM_ACTIVATE()
-	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
-	ON_NOTIFY_REFLECT(TVN_KEYDOWN, OnKeydown)
-	ON_WM_RBUTTONDOWN()
-	//}}AFX_MSG_MAP
+// GroupTree.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "cp_main.h"
+#include "GroupTree.h"
+#include "ActionEnums.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CGroupTree
+
+CGroupTree::CGroupTree()
+{
+	m_bHide = true;
+	m_selectedFolderID = -1;
+	m_bSendAllready = false;
+}
+
+CGroupTree::~CGroupTree()
+{
+}
+
+
+BEGIN_MESSAGE_MAP(CGroupTree, CTreeCtrl)
+	//{{AFX_MSG_MAP(CGroupTree)
+	ON_WM_CREATE()
+	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
+	ON_NOTIFY_REFLECT(NM_RCLICK, OnRclickQuickPaste)
+	ON_WM_KILLFOCUS()
+	ON_WM_ACTIVATE()
+	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
+	ON_NOTIFY_REFLECT(TVN_KEYDOWN, OnKeydown)
+	ON_WM_RBUTTONDOWN()
+	//}}AFX_MSG_MAP
 	ON_COMMAND(ID_MENU_NEWGROUP32896, &CGroupTree::OnMenuNewgroup32896)
 	ON_COMMAND(ID_MENU_DELETEGROUP, &CGroupTree::OnMenuDeletegroup)
 	ON_COMMAND(ID_MENU_PROPERTIES32898, &CGroupTree::OnMenuProperties32898)
@@ -45,44 +45,44 @@ BEGIN_MESSAGE_MAP(CGroupTree, CTreeCtrl)
 	ON_UPDATE_COMMAND_UI(ID_MENU_DELETEGROUP, &CGroupTree::OnUpdateMenuDeletegroup)
 	ON_UPDATE_COMMAND_UI(ID_MENU_PROPERTIES32898, &CGroupTree::OnUpdateMenuProperties32898)
 	ON_WM_INITMENUPOPUP() 
-END_MESSAGE_MAP()
-
-
-/////////////////////////////////////////////////////////////////////////////
-// CGroupTree message handlers
-
-BOOL CGroupTree::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
-{
-	// TODO: Add your specialized code here and/or call the base class
-	
-	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
-}
-
-int CGroupTree::OnCreate(LPCREATESTRUCT lpCreateStruct) 
-{
-	if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
-		return -1;
-
-	CImageList iml;
-	iml.Create(18, 16, ILC_COLOR8, 0, 1);
-
-	m_bmClosedFolder.LoadBitmap(IDB_CLOSED_FOLDER);
-	iml.Add(&m_bmClosedFolder, RGB(255, 0, 0));
-
-	m_bmOpenFolder.LoadBitmap(IDB_OPEN_FOLDER);
-	iml.Add(&m_bmOpenFolder, RGB(255, 0, 0));
-	
-
-	SetImageList(&iml, TVSIL_NORMAL);
-	iml.Detach();
-
-	m_actions.AddAccel(ActionEnums::NEWGROUP, ACCEL_MAKEKEY(VK_F7, HOTKEYF_CONTROL));
-	m_actions.AddAccel(ActionEnums::CLIP_PROPERTIES, ACCEL_MAKEKEY(VK_RETURN, HOTKEYF_ALT));
-	m_actions.AddAccel(ActionEnums::DELETE_SELECTED, VK_DELETE);
-
-	return 0;
-}
-
+END_MESSAGE_MAP()
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CGroupTree message handlers
+
+BOOL CGroupTree::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
+{
+	// TODO: Add your specialized code here and/or call the base class
+	
+	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
+}
+
+int CGroupTree::OnCreate(LPCREATESTRUCT lpCreateStruct) 
+{
+	if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	CImageList iml;
+	iml.Create(18, 16, ILC_COLOR8, 0, 1);
+
+	m_bmClosedFolder.LoadBitmap(IDB_CLOSED_FOLDER);
+	iml.Add(&m_bmClosedFolder, RGB(255, 0, 0));
+
+	m_bmOpenFolder.LoadBitmap(IDB_OPEN_FOLDER);
+	iml.Add(&m_bmOpenFolder, RGB(255, 0, 0));
+	
+
+	SetImageList(&iml, TVSIL_NORMAL);
+	iml.Detach();
+
+	m_actions.AddAccel(ActionEnums::NEWGROUP, ACCEL_MAKEKEY(VK_F7, HOTKEYF_CONTROL));
+	m_actions.AddAccel(ActionEnums::CLIP_PROPERTIES, ACCEL_MAKEKEY(VK_RETURN, HOTKEYF_ALT));
+	m_actions.AddAccel(ActionEnums::DELETE_SELECTED, VK_DELETE);
+
+	return 0;
+}
+
 BOOL CGroupTree::PreTranslateMessage(MSG *pMsg)
 {
 	if(CheckActions(pMsg))
@@ -91,8 +91,8 @@ BOOL CGroupTree::PreTranslateMessage(MSG *pMsg)
 	}
 
 	return CTreeCtrl::PreTranslateMessage(pMsg);
-}
-
+}
+
 bool CGroupTree::CheckActions(MSG * pMsg) 
 {
 	bool ret = false;
@@ -104,8 +104,8 @@ bool CGroupTree::CheckActions(MSG * pMsg)
 	}   
 
 	return ret;
-}
-
+}
+
 bool CGroupTree::DoAction(DWORD actionId)
 {
 	bool ret = false;
@@ -124,203 +124,203 @@ bool CGroupTree::DoAction(DWORD actionId)
 	}
 
 	return ret;
-}
-
-bool CGroupTree::DoActionNewGroup()
-{
-	HTREEITEM hItem = GetSelectedItem();
-	if (hItem)
-	{
-		int id = (int) GetItemData(hItem);
-		::PostMessage(m_NotificationWnd, NM_NEW_GROUP, id, 0);	
-		return true;
-	}
-
-	return false;
-}
-
-bool CGroupTree::DoActionDeleteSelected()
-{
-	HTREEITEM hItem = GetSelectedItem();
-	if (hItem)
-	{
-		int id = (int) GetItemData(hItem);
-		if (id >= 0)
-		{
-			::PostMessage(m_NotificationWnd, NM_DELETE_ID, id, 0);
-			return true;
-		}
-	}
-
-	return false;
-}
-
-bool CGroupTree::DoActionClipProperties()
-{
-	HTREEITEM hItem = GetSelectedItem();
-	if (hItem)
-	{
-		int id = (int) GetItemData(hItem);
-		if (id >= 0)
-		{
-			::PostMessage(m_NotificationWnd, NM_SHOW_PROPERTIES, id, 0);
-			return true;
-		}
-	}
-	return false;
-}
-
-void CGroupTree::FillTree()
-{	
-	DeleteAllItems();
-	m_bSendAllready = false;
-
-	HTREEITEM hItem = InsertItem(_T("-No Group-"), TVI_ROOT);
-	SetItemData(hItem, -1);
-
-	SetItemState(hItem, TVIS_EXPANDED, TVIS_EXPANDED);
-
-	if(m_selectedFolderID < 0)
-		SelectItem(hItem);
-	
-	FillTree(-1, hItem);
-}
-
-
-void CGroupTree::FillTree(int parentID, HTREEITEM hParent)
-{	
-	try
-	{
-		CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID, mText FROM Main WHERE bIsGroup = 1 AND lParentID = %d"), parentID);
-			
-		if(q.eof() == false)
-		{
-			HTREEITEM hItem;
-
-			while(!q.eof())
-			{
-				if(q.getIntField(_T("lID")) == m_selectedFolderID)
-				{
-					hItem = InsertItem(q.getStringField(_T("mText")), 1, 1, hParent);
-					SelectItem(hItem);
-				}
-				else
-				{				
-					hItem = InsertItem(q.getStringField(_T("mText")), 0, 0, hParent);
-				}
-
-				SetItemData(hItem, q.getIntField(_T("lID")));
-				
-				FillTree(q.getIntField(_T("lID")), hItem);
-
-				q.nextRow();
-			}
-		}
-	}		
-	CATCH_SQLITE_EXCEPTION	
-}
-
-void CGroupTree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
-{
-	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
-	// TODO: Add your control notification handler code here
-	
-//	if(m_bHide == true)
-//	{	
-//		::SendMessage(m_NotificationWnd, NM_GROUP_TREE_MESSAGE, GetItemData(pNMTreeView->itemNew.hItem), 0);
-//	}
-	
-	//*pResult = 0;
-}
-
-void CGroupTree::OnKillFocus(CWnd* pNewWnd) 
-{
-	CTreeCtrl::OnKillFocus(pNewWnd);
-}
-
-void CGroupTree::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
-{
-	CTreeCtrl::OnActivate(nState, pWndOther, bMinimized);
-	
-	if(m_bHide)
-	{
-		if (nState == WA_INACTIVE)
-		{		
-			SendToParent(-1);
-		}
-	}
-}
-
-void CGroupTree::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
-{
-	HTREEITEM hItem =  GetNextItem(TVI_ROOT, TVGN_CARET);
-	if(hItem)
-		SendToParent((int)GetItemData(hItem));
-			
-	*pResult = 1;
-}
-
-int CGroupTree::GetSelectedTree()
-{
-	HTREEITEM hItem =  GetNextItem(TVI_ROOT, TVGN_CARET);
-	if(hItem)
-		return (int)GetItemData(hItem);
-
-	return -1;
-}
-
-void CGroupTree::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult) 
-{
-	TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
-	
-	switch(pTVKeyDown->wVKey)
-	{
-	case VK_RETURN:
-	{	
-		HTREEITEM hItem =  GetNextItem(TVI_ROOT, TVGN_CARET);
-		if(hItem)
-			SendToParent((int)GetItemData(hItem));
-		
-		break;
-	}
-	case VK_ESCAPE:
-	{	
-		SendToParent(-1);
-		break;
-	}	
-	}
-	
-	*pResult = 1;
-}
-
-
-void CGroupTree::SendToParent(int parentId)
-{
-	if(m_bSendAllready == false)
-	{
-		m_bSendAllready = true;
-		::PostMessage(m_NotificationWnd, NM_GROUP_TREE_MESSAGE, parentId, 0);
-	}
-}
-
-bool CGroupTree::AddNode(CString csText, int id)
-{
-	HTREEITEM hItem;
-
-	HTREEITEM hParent =  GetNextItem(TVI_ROOT, TVGN_CARET);
-	if(hParent == NULL)
-		return false;
-		
-	hItem = InsertItem(csText, 1, 1, hParent);
-	SelectItem(hItem);
-
-	SetItemData(hItem, id);
-
-	return true;
-}
-
+}
+
+bool CGroupTree::DoActionNewGroup()
+{
+	HTREEITEM hItem = GetSelectedItem();
+	if (hItem)
+	{
+		int id = (int) GetItemData(hItem);
+		::PostMessage(m_NotificationWnd, NM_NEW_GROUP, id, 0);	
+		return true;
+	}
+
+	return false;
+}
+
+bool CGroupTree::DoActionDeleteSelected()
+{
+	HTREEITEM hItem = GetSelectedItem();
+	if (hItem)
+	{
+		int id = (int) GetItemData(hItem);
+		if (id >= 0)
+		{
+			::PostMessage(m_NotificationWnd, NM_DELETE_ID, id, 0);
+			return true;
+		}
+	}
+
+	return false;
+}
+
+bool CGroupTree::DoActionClipProperties()
+{
+	HTREEITEM hItem = GetSelectedItem();
+	if (hItem)
+	{
+		int id = (int) GetItemData(hItem);
+		if (id >= 0)
+		{
+			::PostMessage(m_NotificationWnd, NM_SHOW_PROPERTIES, id, 0);
+			return true;
+		}
+	}
+	return false;
+}
+
+void CGroupTree::FillTree()
+{	
+	DeleteAllItems();
+	m_bSendAllready = false;
+
+	HTREEITEM hItem = InsertItem(_T("-No Group-"), TVI_ROOT);
+	SetItemData(hItem, -1);
+
+	SetItemState(hItem, TVIS_EXPANDED, TVIS_EXPANDED);
+
+	if(m_selectedFolderID < 0)
+		SelectItem(hItem);
+	
+	FillTree(-1, hItem);
+}
+
+
+void CGroupTree::FillTree(int parentID, HTREEITEM hParent)
+{	
+	try
+	{
+		CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID, mText FROM Main WHERE bIsGroup = 1 AND lParentID = %d"), parentID);
+			
+		if(q.eof() == false)
+		{
+			HTREEITEM hItem;
+
+			while(!q.eof())
+			{
+				if(q.getIntField(_T("lID")) == m_selectedFolderID)
+				{
+					hItem = InsertItem(q.getStringField(_T("mText")), 1, 1, hParent);
+					SelectItem(hItem);
+				}
+				else
+				{				
+					hItem = InsertItem(q.getStringField(_T("mText")), 0, 0, hParent);
+				}
+
+				SetItemData(hItem, q.getIntField(_T("lID")));
+				
+				FillTree(q.getIntField(_T("lID")), hItem);
+
+				q.nextRow();
+			}
+		}
+	}		
+	CATCH_SQLITE_EXCEPTION	
+}
+
+void CGroupTree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
+{
+	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
+	// TODO: Add your control notification handler code here
+	
+//	if(m_bHide == true)
+//	{	
+//		::SendMessage(m_NotificationWnd, NM_GROUP_TREE_MESSAGE, GetItemData(pNMTreeView->itemNew.hItem), 0);
+//	}
+	
+	//*pResult = 0;
+}
+
+void CGroupTree::OnKillFocus(CWnd* pNewWnd) 
+{
+	CTreeCtrl::OnKillFocus(pNewWnd);
+}
+
+void CGroupTree::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
+{
+	CTreeCtrl::OnActivate(nState, pWndOther, bMinimized);
+	
+	if(m_bHide)
+	{
+		if (nState == WA_INACTIVE)
+		{		
+			SendToParent(-1);
+		}
+	}
+}
+
+void CGroupTree::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
+{
+	HTREEITEM hItem =  GetNextItem(TVI_ROOT, TVGN_CARET);
+	if(hItem)
+		SendToParent((int)GetItemData(hItem));
+			
+	*pResult = 1;
+}
+
+int CGroupTree::GetSelectedTree()
+{
+	HTREEITEM hItem =  GetNextItem(TVI_ROOT, TVGN_CARET);
+	if(hItem)
+		return (int)GetItemData(hItem);
+
+	return -1;
+}
+
+void CGroupTree::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult) 
+{
+	TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
+	
+	switch(pTVKeyDown->wVKey)
+	{
+	case VK_RETURN:
+	{	
+		HTREEITEM hItem =  GetNextItem(TVI_ROOT, TVGN_CARET);
+		if(hItem)
+			SendToParent((int)GetItemData(hItem));
+		
+		break;
+	}
+	case VK_ESCAPE:
+	{	
+		SendToParent(-1);
+		break;
+	}	
+	}
+	
+	*pResult = 1;
+}
+
+
+void CGroupTree::SendToParent(int parentId)
+{
+	if(m_bSendAllready == false)
+	{
+		m_bSendAllready = true;
+		::PostMessage(m_NotificationWnd, NM_GROUP_TREE_MESSAGE, parentId, 0);
+	}
+}
+
+bool CGroupTree::AddNode(CString csText, int id)
+{
+	HTREEITEM hItem;
+
+	HTREEITEM hParent =  GetNextItem(TVI_ROOT, TVGN_CARET);
+	if(hParent == NULL)
+		return false;
+		
+	hItem = InsertItem(csText, 1, 1, hParent);
+	SelectItem(hItem);
+
+	SetItemData(hItem, id);
+
+	return true;
+}
+
 void CGroupTree::OnRButtonDown(UINT nFlags, CPoint point)
-{
+{
 	UINT nHitFlags = 0;
 	HTREEITEM hClickedItem = HitTest(point, &nHitFlags);
 
@@ -328,9 +328,9 @@ void CGroupTree::OnRButtonDown(UINT nFlags, CPoint point)
 		if (GetSelectedCount() < 2)
 			SelectItem(hClickedItem);
 
-	CTreeCtrl::OnRButtonDown(nFlags, point);
-}
-
+	CTreeCtrl::OnRButtonDown(nFlags, point);
+}
+
 UINT CGroupTree::GetSelectedCount() const
 {
 	// Only visible items should be selected!
@@ -340,8 +340,8 @@ UINT CGroupTree::GetSelectedCount() const
 			uCount++;
 
 	return uCount;
-}
-
+}
+
 void CGroupTree::OnRclickQuickPaste(NMHDR *pNMHDR, LRESULT *pResult)
 {
 	POINT pp;
@@ -416,7 +416,7 @@ void CGroupTree::UpdateMenuShortCut(CCmdUI *pCmdUI, DWORD action)
 	}
 }
 
-void CGroupTree::OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex,BOOL bSysMenu)
+void CGroupTree::OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex,BOOL bSysMenu)
 {
 	OnInitMenuPopupEx(pPopupMenu, nIndex, bSysMenu, this);
 }

+ 10 - 0
Options.cpp

@@ -2304,4 +2304,14 @@ int CGetSetOptions::GetLastGroupToggle()
 void CGetSetOptions::SetLastGroupToggle(int val)
 {
 	SetProfileLong(_T("LastGroupToggle"), val);
+}
+
+BOOL CGetSetOptions::GetMouseClickHidesDescription()
+{
+	return GetProfileLong(_T("MouseClickHidesDescription"), TRUE);
+}
+
+void CGetSetOptions::SetMouseClickHidesDescription(int val)
+{
+	SetProfileLong(_T("MouseClickHidesDescription"), val);
 }

+ 3 - 0
Options.h

@@ -524,6 +524,9 @@ public:
 
 	static int GetLastGroupToggle();
 	static void SetLastGroupToggle(int val);
+
+	static BOOL GetMouseClickHidesDescription();
+	static void SetMouseClickHidesDescription(int val);
 };
 
 // global for easy access and for initialization of fast access variables

+ 32 - 60
QPasteWnd.cpp

@@ -185,7 +185,6 @@ ON_COMMAND(ID_MENU_NEWGROUPSELECTION, OnMenuNewGroupSelection)
 ON_MESSAGE(NM_GROUP_TREE_MESSAGE, OnGroupTreeMessage)
 ON_COMMAND(ID_BACK_BUTTON, OnBackButton)
 ON_COMMAND(ID_SYSTEM_BUTTON, OnSystemButton)
-ON_COMMAND(ID_SEARCH_DESCRIPTION_BUTTON, OnSearchDescription)
 ON_MESSAGE(CB_UPDOWN, OnUpDown)
 ON_MESSAGE(NM_INACTIVE_TOOLTIPWND, OnToolTipWndInactive)
 ON_MESSAGE(NM_SET_LIST_COUNT, OnSetListCount)
@@ -344,13 +343,7 @@ int CQPasteWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	m_systemMenu.LoadStdImageDPI(IDB_SYSTEM_MENU_16_16, IDB_SYSTEM_MENU_20_20, IDB_SYSTEM_MENU_24_24, IDB_SYSTEM_MENU_32_32, _T("PNG"));
 	m_systemMenu.ModifyStyle(WS_TABSTOP, 0);
 	m_systemMenu.ShowWindow(SW_SHOW);
-
-	m_searchOptionsButton.Create(NULL, WS_CHILD | BS_OWNERDRAW | WS_TABSTOP, CRect(0, 0, 0, 0), this, ID_SEARCH_DESCRIPTION_BUTTON);
-	m_searchOptionsButton.LoadStdImageDPI(IDB_COG_16_16, IDB_COG_20_20, IDB_COG_24_24, IDB_COG_32_32, _T("PNG"));
-	m_searchOptionsButton.SetToolTipText(theApp.m_Language.GetString(_T("SearchOptionsTooltip"), _T("Search options")));
-	m_searchOptionsButton.ModifyStyle(WS_TABSTOP, 0);
-	m_searchOptionsButton.ShowWindow(SW_SHOW);		
-
+		
     m_stGroup.Create(_T(""), WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, ID_GROUP_TEXT);
 	
 
@@ -566,9 +559,7 @@ void CQPasteWnd::MoveControls()
 	}
 
 	m_lstHeader.MoveWindow(0, topOfListBox, cx+extraSize, cy - listBoxBottomOffset-topOfListBox + extraSize);
-	m_search.MoveWindow(theApp.m_metrics.ScaleX(20), cy - theApp.m_metrics.ScaleY(searchRowStart-1), cx - theApp.m_metrics.ScaleX(61), theApp.m_metrics.ScaleY(20));
-
-	m_searchOptionsButton.MoveWindow(cx - theApp.m_metrics.ScaleX(36), cy - theApp.m_metrics.ScaleY(searchRowStart-3), theApp.m_metrics.ScaleX(16), theApp.m_metrics.ScaleY(16));
+	m_search.MoveWindow(theApp.m_metrics.ScaleX(20), cy - theApp.m_metrics.ScaleY(searchRowStart-1), cx - theApp.m_metrics.ScaleX(40), theApp.m_metrics.ScaleY(20));
 
 	m_systemMenu.MoveWindow(cx - theApp.m_metrics.ScaleX(18), cy - theApp.m_metrics.ScaleY(searchRowStart - 3), theApp.m_metrics.ScaleX(16), theApp.m_metrics.ScaleY(16));
 
@@ -673,6 +664,8 @@ BOOL CQPasteWnd::HideQPasteWindow (bool releaseFocus, bool clearSearchData)
 
     KillTimer(TIMER_FILL_CACHE);
 
+	m_lstHeader.HidePopup();
+
     //Save the size
     SaveWindowSize();
 
@@ -1633,6 +1626,27 @@ void CQPasteWnd::SetMenuChecks(CMenu *pMenu)
 	{
 		pMenu->CheckMenuItem(ID_QUICKOPTIONS_SHOWINDICATORACLIPHASBEENPASTED, MF_CHECKED);
 	}
+
+	if (CGetSetOptions::GetSearchDescription())
+		pMenu->CheckMenuItem(ID_MENU_SEARCHDESCRIPTION, MF_CHECKED);
+
+	if (CGetSetOptions::GetSearchFullText())
+		pMenu->CheckMenuItem(ID_MENU_SEARCHFULLTEXT, MF_CHECKED);
+
+	if (CGetSetOptions::GetSearchQuickPaste())
+		pMenu->CheckMenuItem(ID_MENU_SEARCHQUICKPASTE, MF_CHECKED);
+
+	if (CGetSetOptions::GetSimpleTextSearch())
+		pMenu->CheckMenuItem(ID_MENU_CONTAINSTEXTSEARCHONLY, MF_CHECKED);
+
+	if (CGetSetOptions::GetRegExTextSearch())
+		pMenu->CheckMenuItem(ID_MENU_REGULAREXPRESSIONSEARCH, MF_CHECKED);
+
+	if (CGetSetOptions::GetSimpleTextSearch() == FALSE &&
+		CGetSetOptions::GetRegExTextSearch() == FALSE)
+	{
+		pMenu->CheckMenuItem(ID_MENU_WILDCARDSEARCH, MF_CHECKED);
+	}
 }
 
 void CQPasteWnd::SetSendToMenu(CMenu *pMenu, int nMenuID, int nArrayPos)
@@ -4725,6 +4739,8 @@ void CQPasteWnd::OnWindowPosChanging(WINDOWPOS *lpwndpos)
 
 void CQPasteWnd::OnShowGroupsTop()
 {
+	m_lstHeader.HidePopup();
+
     OnShowGroupsBottom();
     return ;
     m_GroupTree.m_bHide = false;
@@ -4733,9 +4749,7 @@ void CQPasteWnd::OnShowGroupsTop()
     CRect crList;
     m_lstHeader.GetWindowRect(crList);
 
-    CRect cr(crList.left, crList.top, crList.left + crList.Width(), crList.top + 200);
-
-	
+    CRect cr(crList.left, crList.top, crList.left + crList.Width(), crList.top + 200);	
 
     m_GroupTree.MoveWindow(cr);
     m_GroupTree.m_selectedFolderID = theApp.m_GroupID;
@@ -4749,6 +4763,8 @@ void CQPasteWnd::OnShowGroupsTop()
 
 void CQPasteWnd::OnShowGroupsBottom()
 {
+	m_lstHeader.HidePopup();
+
     m_GroupTree.m_bHide = false;
     m_bHideWnd = false;
 
@@ -4821,52 +4837,6 @@ void CQPasteWnd::OnBackButton()
     theApp.EnterGroupID(theApp.m_GroupParentID);
 }
 
-void CQPasteWnd::OnSearchDescription()
-{
-	POINT pp;
-	CMenu cmPopUp;
-	CMenu *cmSubMenu = NULL;
-
-	GetCursorPos(&pp);
-	if(cmPopUp.LoadMenu(IDR_MENU_SEARCH) != 0)
-	{
-		cmSubMenu = cmPopUp.GetSubMenu(0);
-		if(!cmSubMenu)
-		{
-			return ;
-		}
-
-		GetCursorPos(&pp);
-
-		if(CGetSetOptions::GetSearchDescription())
-			cmSubMenu->CheckMenuItem(ID_MENU_SEARCHDESCRIPTION, MF_CHECKED);
-
-		if(CGetSetOptions::GetSearchFullText())
-			cmSubMenu->CheckMenuItem(ID_MENU_SEARCHFULLTEXT, MF_CHECKED);
-
-		if(CGetSetOptions::GetSearchQuickPaste())
-			cmSubMenu->CheckMenuItem(ID_MENU_SEARCHQUICKPASTE, MF_CHECKED);
-
-		if(CGetSetOptions::GetSimpleTextSearch())
-			cmSubMenu->CheckMenuItem(ID_MENU_CONTAINSTEXTSEARCHONLY, MF_CHECKED);
-
-		if (CGetSetOptions::GetRegExTextSearch())
-			cmSubMenu->CheckMenuItem(ID_MENU_REGULAREXPRESSIONSEARCH, MF_CHECKED);
-
-		if(CGetSetOptions::GetSimpleTextSearch() == FALSE &&
-			CGetSetOptions::GetRegExTextSearch() == FALSE)
-		{
-			cmSubMenu->CheckMenuItem(ID_MENU_WILDCARDSEARCH, MF_CHECKED);
-		}		
-
-		//theApp.m_Language.UpdateRightClickMenu(cmSubMenu);
-
-		
-
-		cmSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON, pp.x, pp.y, this, NULL);
-	}
-}
-
 void CQPasteWnd::OnMenuSearchDescription()
 {
 	CGetSetOptions::SetSearchDescription(!CGetSetOptions::GetSearchDescription());
@@ -5682,6 +5652,8 @@ void CQPasteWnd::OnUpdateSpecialpasteSentence(CCmdUI *pCmdUI)
 
 void CQPasteWnd::OnSystemButton()
 {
+	m_lstHeader.HidePopup();
+
 	POINT pp;
 	CMenu cmPopUp;
 	CMenu *cmSubMenu = NULL;

+ 0 - 2
QPasteWnd.h

@@ -136,7 +136,6 @@ public:
     CGroupTree m_GroupTree;
     CGdipButton m_ShowGroupsFolderBottom;
     CGdipButton m_BackButton;
-	CGdipButton m_searchOptionsButton;
 	CGroupStatic m_alwaysOnToWarningStatic;
 	CGdipButton m_systemMenu;
 
@@ -389,7 +388,6 @@ protected:
     afx_msg void OnMenuNewGroupSelection();
     afx_msg void OnBackButton();
 	afx_msg void OnSystemButton();
-	afx_msg void OnSearchDescription();
     afx_msg LRESULT OnUpDown(WPARAM wParam, LPARAM lParam);
     afx_msg LRESULT OnItemDeleted(WPARAM wParam, LPARAM lParam);
     LRESULT OnToolTipWndInactive(WPARAM wParam, LPARAM lParam);

+ 2 - 1
Resource.h

@@ -576,6 +576,7 @@
 #define ID_QUICKOPTIONS_SHOWTEXTFORFIRSTTENCOPYHOTKEYS 32923
 #define ID_QUICKOPTIONS_SHOWINDICATORACLIPHASBEENPASTED 32924
 #define ID_GROUPS_TOGGLELASTGROUP       32925
+#define ID_FIRST_HIDEDESCRIPTIONWINDOWONM 32926
 
 // Next default values for new objects
 // 
@@ -583,7 +584,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        258
-#define _APS_NEXT_COMMAND_VALUE         32926
+#define _APS_NEXT_COMMAND_VALUE         32927
 #define _APS_NEXT_CONTROL_VALUE         2146
 #define _APS_NEXT_SYMED_VALUE           104
 #endif

+ 21 - 11
ToolTipEx.cpp

@@ -58,7 +58,8 @@ ON_WM_SETFOCUS()
 
 
 
-END_MESSAGE_MAP() 
+ON_COMMAND(ID_FIRST_HIDEDESCRIPTIONWINDOWONM, &CToolTipEx::OnFirstHidedescriptionwindowonm)
+END_MESSAGE_MAP()
 
 
 /////////////////////////////////////////////////////////////////////////////
@@ -301,12 +302,15 @@ BOOL CToolTipEx::OnMsg(MSG *pMsg)
         case WM_WINDOWPOSCHANGING:
         case WM_LBUTTONDOWN:
             {
-                if(!IsCursorInToolTip())
-                {
-                    Hide();
-                }
-                break;
+				if (CGetSetOptions::GetMouseClickHidesDescription())
+				{
+					if (!IsCursorInToolTip())
+					{
+						Hide();
+					}
+				}
             }
+			break;
         case WM_KEYDOWN:
             {
                 WPARAM vk = pMsg->wParam;
@@ -682,10 +686,8 @@ void CToolTipEx::OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized)
 {
     CWnd::OnActivate(nState, pWndOther, bMinimized);
 
-    if(nState == WA_INACTIVE)
-    {
-        Hide();
-
+	if (nState == WA_INACTIVE)
+	{		
         if(m_pNotifyWnd)
         {
             m_pNotifyWnd->PostMessage(NM_INACTIVE_TOOLTIPWND, 0, 0);
@@ -781,6 +783,9 @@ void CToolTipEx::OnOptions()
 
 		if(CGetSetOptions::GetScaleImagesToDescWindow())
 			cmSubMenu->CheckMenuItem(ID_FIRST_SCALEIMAGESTOFITWINDOW, MF_CHECKED);
+
+		if (CGetSetOptions::GetMouseClickHidesDescription())
+			cmSubMenu->CheckMenuItem(ID_FIRST_HIDEDESCRIPTIONWINDOWONM, MF_CHECKED);
 		
 		//theApp.m_Language.UpdateRightClickMenu(cmSubMenu);
 		
@@ -841,4 +846,9 @@ void CToolTipEx::OnPaint()
 
 	// Cleanup
 	dc.SelectObject(pOldBrush);
-}
+}
+
+void CToolTipEx::OnFirstHidedescriptionwindowonm()
+{
+	CGetSetOptions::SetMouseClickHidesDescription(!CGetSetOptions::GetMouseClickHidesDescription());
+}

+ 1 - 0
ToolTipEx.h

@@ -107,6 +107,7 @@ public:
 	afx_msg void OnSetFocus(CWnd* pOldWnd);
 	afx_msg void OnPaint();
 	
+	afx_msg void OnFirstHidedescriptionwindowonm();
 };
 
 /////////////////////////////////////////////////////////////////////////////