From f4de4e6a4c9aa81f681cd7a3226dc4eb30ff0ff0 Mon Sep 17 00:00:00 2001 From: Johan t Hart Date: Sun, 26 Apr 2009 23:26:04 +0200 Subject: [PATCH] BrowseRefsDlg: Started treeview context menu --- src/Resources/TortoiseProcENG.rc | Bin 426274 -> 427698 bytes src/TortoiseProc/AddRemoteDlg.cpp | 47 ++++++++++++++++ src/TortoiseProc/AddRemoteDlg.h | 25 +++++++++ src/TortoiseProc/BrowseRefsDlg.cpp | 65 +++++++++++++++++----- src/TortoiseProc/BrowseRefsDlg.h | 23 +++++--- src/TortoiseProc/TortoiseProc.vcproj | 102 +++++++++++++++++++---------------- src/TortoiseProc/resource.h | Bin 158546 -> 158836 bytes 7 files changed, 194 insertions(+), 68 deletions(-) create mode 100644 src/TortoiseProc/AddRemoteDlg.cpp create mode 100644 src/TortoiseProc/AddRemoteDlg.h diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index 7b6aa46a231c6ce98fe869f4131f68e79717a664..ee18c64afe7470cc9cb66a0578811b4d92e3a6b2 100644 GIT binary patch delta 281 zcmZ3~B(?RDxFcI77Jbuh-+-5+&5fB2&=@;!8 zO{Y67V&a%?@_6xw;Z+*#_0jc z%u+xPRlZ=}&uBco@f@=*qser|HO%7E9lDvlrZ=T9OH7~epP6g=v^+Mc?Rj}@TZ91F CU`)^e delta 43 zcmdngE48Res-cCkg{g(Pg{6gc3)`aX?HlshRxnMU@SmA$x>^aF)b@YHY+Hl?Y6K8~ diff --git a/src/TortoiseProc/AddRemoteDlg.cpp b/src/TortoiseProc/AddRemoteDlg.cpp new file mode 100644 index 0000000..a384173 --- /dev/null +++ b/src/TortoiseProc/AddRemoteDlg.cpp @@ -0,0 +1,47 @@ +// AddRemoteDlg.cpp : implementation file +// + +#include "stdafx.h" +#include "TortoiseProc.h" +#include "AddRemoteDlg.h" + + +// CAddRemoteDlg dialog + +IMPLEMENT_DYNAMIC(CAddRemoteDlg, CDialog) + +CAddRemoteDlg::CAddRemoteDlg(CWnd* pParent /*=NULL*/) + : CDialog(CAddRemoteDlg::IDD, pParent) + , m_Name(_T("")) + , m_Url(_T("")) +{ + +} + +CAddRemoteDlg::~CAddRemoteDlg() +{ +} + +void CAddRemoteDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + DDX_Text(pDX, IDC_EDIT_NAME, m_Name); + DDX_Text(pDX, IDC_EDIT_URL, m_Url); +} + + +BEGIN_MESSAGE_MAP(CAddRemoteDlg, CDialog) + ON_BN_CLICKED(IDOK, &CAddRemoteDlg::OnBnClickedOk) +END_MESSAGE_MAP() + + +// CAddRemoteDlg message handlers + +void CAddRemoteDlg::OnBnClickedOk() +{ + UpdateData(); + + + + OnOK(); +} diff --git a/src/TortoiseProc/AddRemoteDlg.h b/src/TortoiseProc/AddRemoteDlg.h new file mode 100644 index 0000000..b1feccc --- /dev/null +++ b/src/TortoiseProc/AddRemoteDlg.h @@ -0,0 +1,25 @@ +#pragma once + + +// CAddRemoteDlg dialog + +class CAddRemoteDlg : public CDialog +{ + DECLARE_DYNAMIC(CAddRemoteDlg) + +public: + CAddRemoteDlg(CWnd* pParent = NULL); // standard constructor + virtual ~CAddRemoteDlg(); + +// Dialog Data + enum { IDD = IDD_ADD_REMOTE }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() +public: + CString m_Name; + CString m_Url; + afx_msg void OnBnClickedOk(); +}; diff --git a/src/TortoiseProc/BrowseRefsDlg.cpp b/src/TortoiseProc/BrowseRefsDlg.cpp index 8cb59b2..83306e9 100644 --- a/src/TortoiseProc/BrowseRefsDlg.cpp +++ b/src/TortoiseProc/BrowseRefsDlg.cpp @@ -5,6 +5,7 @@ #include "TortoiseProc.h" #include "BrowseRefsDlg.h" #include "LogDlg.h" +#include "AddRemoteDlg.h" // CBrowseRefsDlg dialog @@ -32,7 +33,7 @@ void CBrowseRefsDlg::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CBrowseRefsDlg, CResizableStandAloneDialog) ON_BN_CLICKED(IDOK, &CBrowseRefsDlg::OnBnClickedOk) ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_REF, &CBrowseRefsDlg::OnTvnSelchangedTreeRef) - ON_NOTIFY(NM_RCLICK, IDC_LIST_REF_LEAFS, &CBrowseRefsDlg::OnNMRClickListRefLeafs) + ON_WM_CONTEXTMENU() END_MESSAGE_MAP() @@ -83,7 +84,7 @@ CShadowTree* CShadowTree::GetNextSub(CString& nameLeft) return NULL; CShadowTree& nextNode=m_ShadowTree[nameSub]; - nextNode.m_csName=nameSub; + nextNode.m_csRefName=nameSub; nextNode.m_pParent=this; return &nextNode; } @@ -98,7 +99,8 @@ void CBrowseRefsDlg::Refresh() m_RefTreeCtrl.DeleteAllItems(); m_TreeRoot.m_ShadowTree.clear(); - m_TreeRoot.m_csName="Refs"; + m_TreeRoot.m_csRefName="refs"; +// m_TreeRoot.m_csShowName="Refs"; m_TreeRoot.m_hTree=m_RefTreeCtrl.InsertItem(L"Refs",NULL,NULL); m_RefTreeCtrl.SetItemData(m_TreeRoot.m_hTree,(DWORD_PTR)&m_TreeRoot); @@ -138,7 +140,7 @@ void CBrowseRefsDlg::Refresh() CString values=iterRefMap->second; int valuePos=0; - treeLeaf.m_csRef= values.Tokenize(L"\04",valuePos); + treeLeaf.m_csRefHash= values.Tokenize(L"\04",valuePos); treeLeaf.m_csDate= values.Tokenize(L"\04",valuePos); treeLeaf.m_csSubject= values.Tokenize(L"\04",valuePos); treeLeaf.m_csAuthor= values.Tokenize(L"\04",valuePos); @@ -205,7 +207,7 @@ CShadowTree& CBrowseRefsDlg::GetTreeNode(CString refName, CShadowTree* pTreePos) if(pNextTree->m_hTree==NULL) { //New tree. Create node in control. - pNextTree->m_hTree=m_RefTreeCtrl.InsertItem(pNextTree->m_csName,pTreePos->m_hTree,NULL); + pNextTree->m_hTree=m_RefTreeCtrl.InsertItem(pNextTree->m_csRefName,pTreePos->m_hTree,NULL); m_RefTreeCtrl.SetItemData(pNextTree->m_hTree,(DWORD_PTR)pNextTree); } } @@ -242,17 +244,17 @@ void CBrowseRefsDlg::FillListCtrlForShadowTree(CShadowTree* pTree, CString refNa int indexItem=m_ListRefLeafs.InsertItem(m_ListRefLeafs.GetItemCount(),L""); m_ListRefLeafs.SetItemData(indexItem,(DWORD_PTR)pTree); - m_ListRefLeafs.SetItemText(indexItem,0,refNamePrefix+pTree->m_csName); + m_ListRefLeafs.SetItemText(indexItem,0,refNamePrefix+pTree->m_csRefName); m_ListRefLeafs.SetItemText(indexItem,1,pTree->m_csDate); m_ListRefLeafs.SetItemText(indexItem,2,pTree->m_csSubject); - m_ListRefLeafs.SetItemText(indexItem,3,pTree->m_csRef); + m_ListRefLeafs.SetItemText(indexItem,3,pTree->m_csRefHash); } else { CString csThisName; if(!isFirstLevel) - csThisName=refNamePrefix+pTree->m_csName+L"/"; + csThisName=refNamePrefix+pTree->m_csRefName+L"/"; for(CShadowTree::TShadowTreeMap::iterator itSubTree=pTree->m_ShadowTree.begin(); itSubTree!=pTree->m_ShadowTree.end(); ++itSubTree) { FillListCtrlForShadowTree(&itSubTree->second,csThisName,false); @@ -260,10 +262,11 @@ void CBrowseRefsDlg::FillListCtrlForShadowTree(CShadowTree* pTree, CString refNa } } -void CBrowseRefsDlg::OnNMRClickListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult) +void CBrowseRefsDlg::OnContextMenu_ListRefLeafs(CPoint point) { -// LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); - *pResult = 0; + + CPoint clientPoint=point; + m_RefTreeCtrl.ScreenToClient(&clientPoint); int selectedItemCount=m_ListRefLeafs.GetSelectedCount(); @@ -291,16 +294,50 @@ void CBrowseRefsDlg::OnNMRClickListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult) } - const MSG* pCurrMsg=GetCurrentMessage(); - eCmd cmd=(eCmd)popupMenu.TrackPopupMenuEx(TPM_LEFTALIGN|TPM_RETURNCMD, pCurrMsg->pt.x, pCurrMsg->pt.y, this, 0); + eCmd cmd=(eCmd)popupMenu.TrackPopupMenuEx(TPM_LEFTALIGN|TPM_RETURNCMD, point.x, point.y, this, 0); switch(cmd) { case eCmd_ViewLog: { CLogDlg dlg; - dlg.SetStartRef(selectedTrees[0]->m_csRef); + dlg.SetStartRef(selectedTrees[0]->m_csRefHash); dlg.DoModal(); } break; } } + +void CBrowseRefsDlg::OnContextMenu(CWnd* pWndFrom, CPoint point) +{ + if(pWndFrom==&m_RefTreeCtrl) OnContextMenu_RefTreeCtrl(point); + else if(pWndFrom==&m_ListRefLeafs) OnContextMenu_ListRefLeafs(point); +} + +void CBrowseRefsDlg::OnContextMenu_RefTreeCtrl(CPoint point) +{ + CMenu popupMenu; + popupMenu.CreatePopupMenu(); + + CPoint clientPoint=point; + m_RefTreeCtrl.ScreenToClient(&clientPoint); + + HTREEITEM hTreeItem=m_RefTreeCtrl.HitTest(clientPoint); + if(hTreeItem!=NULL) + { + m_RefTreeCtrl.Select(hTreeItem,TVGN_CARET); + CShadowTree* pTree=(CShadowTree*)m_RefTreeCtrl.GetItemData(hTreeItem); + if(wcsncmp(pTree->GetRefName(),L"refs/remotes",12)==0) + popupMenu.AppendMenu(MF_STRING,eCmd_AddRemote,L"Add Remote"); + } + + eCmd cmd=(eCmd)popupMenu.TrackPopupMenuEx(TPM_LEFTALIGN|TPM_RETURNCMD, point.x, point.y, this, 0); + switch(cmd) + { + case eCmd_AddRemote: + { + CAddRemoteDlg(this).DoModal(); + Refresh(); + } + break; + } +} diff --git a/src/TortoiseProc/BrowseRefsDlg.h b/src/TortoiseProc/BrowseRefsDlg.h index f90cce2..231779a 100644 --- a/src/TortoiseProc/BrowseRefsDlg.h +++ b/src/TortoiseProc/BrowseRefsDlg.h @@ -10,15 +10,20 @@ class CShadowTree public: typedef std::map TShadowTreeMap; - CShadowTree():m_hTree(NULL){} + CShadowTree():m_hTree(NULL),m_pParent(NULL){} CShadowTree* GetNextSub(CString& nameLeft); bool IsLeaf()const {return m_ShadowTree.empty();} + CString GetRefName()const + { + if(m_pParent==NULL) + return m_csRefName; + return m_pParent->GetRefName()+"/"+m_csRefName; + } - - CString m_csName; - CString m_csRef; + CString m_csRefName; + CString m_csRefHash; CString m_csDate; CString m_csAuthor; CString m_csSubject; @@ -39,7 +44,8 @@ public: enum eCmd { - eCmd_ViewLog = WM_APP + eCmd_ViewLog = WM_APP, + eCmd_AddRemote }; // Dialog Data @@ -64,12 +70,15 @@ public: bool SelectRef(CString refName); private: -// MAP_HASH_NAME m_RefMap; CShadowTree m_TreeRoot; CTreeCtrl m_RefTreeCtrl; CListCtrl m_ListRefLeafs; afx_msg void OnTvnSelchangedTreeRef(NMHDR *pNMHDR, LRESULT *pResult); public: - afx_msg void OnNMRClickListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult); + + afx_msg void OnContextMenu(CWnd* pWndFrom, CPoint point); + + void OnContextMenu_ListRefLeafs(CPoint point); + void OnContextMenu_RefTreeCtrl(CPoint point); }; diff --git a/src/TortoiseProc/TortoiseProc.vcproj b/src/TortoiseProc/TortoiseProc.vcproj index 1029f5a..d0d4733 100644 --- a/src/TortoiseProc/TortoiseProc.vcproj +++ b/src/TortoiseProc/TortoiseProc.vcproj @@ -1,7 +1,7 @@ @@ -165,14 +166,19 @@ @@ -254,19 +259,14 @@ + + + + @@ -572,11 +580,11 @@ > Hu)(Q0336Q80WdJ$=TmVD>WdL>nWdLjdZvb$ys|!YxkOKshPzwf^AVvW) zm+)Q!1eX|U0v4B0Faip*yhixzmRA7?0W+7eO#v~NelYGTkng zO92Fz&}sr0m+*Q49+yCQ0SuGiI~J4h3geHi>Ci6Vw3=}M5fE-FogjCG<6%f -- 2.11.0