6 #include "StandAloneDlg.h"
\r
9 const int gPickRef_Head = 1;
\r
10 const int gPickRef_Tag = 2;
\r
11 const int gPickRef_Remote = 4;
\r
12 const int gPickRef_All = gPickRef_Head | gPickRef_Tag | gPickRef_Remote;
\r
13 const int gPickRef_NoTag = gPickRef_All & ~gPickRef_Tag;
\r
18 typedef std::map<CString,CShadowTree> TShadowTreeMap;
\r
20 CShadowTree():m_hTree(NULL),m_pParent(NULL){}
\r
22 CShadowTree* GetNextSub(CString& nameLeft, bool bCreateIfNotExist);
\r
24 bool IsLeaf()const {return m_ShadowTree.empty();}
\r
25 CString GetRefName()const
\r
29 return m_pParent->GetRefName()+"/"+m_csRefName;
\r
31 bool IsFrom(const wchar_t* from)const
\r
33 return wcsncmp(GetRefName(),from,wcslen(from))==0;
\r
36 CShadowTree* FindLeaf(CString partialRefName);
\r
38 CString m_csRefName;
\r
39 CString m_csRefHash;
\r
41 CString m_csDate_Iso8601;
\r
43 CString m_csSubject;
\r
47 TShadowTreeMap m_ShadowTree;
\r
48 CShadowTree* m_pParent;
\r
50 typedef std::vector<CShadowTree*> VectorPShadowTree;
\r
52 class CBrowseRefsDlg : public CResizableStandAloneDialog
\r
54 DECLARE_DYNAMIC(CBrowseRefsDlg)
\r
57 CBrowseRefsDlg(CString cmdPath, CWnd* pParent = NULL); // standard constructor
\r
58 virtual ~CBrowseRefsDlg();
\r
62 eCmd_ViewLog = WM_APP,
\r
68 eCmd_DeleteRemoteBranch,
\r
85 enum { IDD = IDD_DIALOG_BROWSE_REFS };
\r
88 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
\r
90 DECLARE_MESSAGE_MAP()
\r
92 afx_msg void OnBnClickedOk();
\r
93 virtual BOOL OnInitDialog();
\r
95 CString GetSelectedRef(bool onlyIfLeaf, bool pickFirstSelIfMultiSel = false);
\r
97 void Refresh(CString selectRef = CString());
\r
99 CShadowTree& GetTreeNode(CString refName, CShadowTree* pTreePos=NULL, bool bCreateIfNotExist=false);
\r
101 void FillListCtrlForTreeNode(HTREEITEM treeNode);
\r
103 void FillListCtrlForShadowTree(CShadowTree* pTree, CString refNamePrefix, bool isFirstLevel);
\r
105 bool SelectRef(CString refName, bool bExactMatch);
\r
107 bool ConfirmDeleteRef(VectorPShadowTree& leafs);
\r
108 bool DoDeleteRefs(VectorPShadowTree& leafs, bool bForce);
\r
109 bool DoDeleteRef(CString completeRefName, bool bForce);
\r
111 CString GetFullRefName(CString partialRefName);
\r
116 CShadowTree m_TreeRoot;
\r
117 CTreeCtrl m_RefTreeCtrl;
\r
118 CListCtrl m_ListRefLeafs;
\r
121 bool m_currSortDesc;
\r
122 afx_msg void OnTvnSelchangedTreeRef(NMHDR *pNMHDR, LRESULT *pResult);
\r
125 afx_msg void OnContextMenu(CWnd* pWndFrom, CPoint point);
\r
127 void OnContextMenu_ListRefLeafs(CPoint point);
\r
128 void OnContextMenu_RefTreeCtrl(CPoint point);
\r
130 bool AreAllFrom(VectorPShadowTree& leafs, const wchar_t* from);
\r
131 void ShowContextMenu(CPoint point, HTREEITEM hTreePos, VectorPShadowTree& selectedLeafs);
\r
132 virtual BOOL PreTranslateMessage(MSG* pMsg);
\r
133 afx_msg void OnLvnColumnclickListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult);
\r
134 afx_msg void OnDestroy();
\r
135 afx_msg void OnNMDblclkListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult);
\r
139 CString m_initialRef;
\r
140 int m_pickRef_Kind;
\r
141 CString m_pickedRef;
\r
143 static CString PickRef(bool returnAsHash = false, CString initialRef = CString(), int pickRef_Kind = gPickRef_All);
\r
144 static bool PickRefForCombo(CComboBoxEx* pComboBox, int pickRef_Kind = gPickRef_All);
\r