OSDN Git Service

Add SYNC dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / BrowseRefsDlg.h
1 #pragma once\r
2 \r
3 #include "Git.h"\r
4 #include <map>\r
5 #include "afxcmn.h"\r
6 #include "StandAloneDlg.h"\r
7 \r
8 \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
14 \r
15 class CShadowTree\r
16 {\r
17 public:\r
18         typedef std::map<CString,CShadowTree> TShadowTreeMap;\r
19 \r
20         CShadowTree():m_hTree(NULL),m_pParent(NULL){}\r
21         \r
22         CShadowTree*    GetNextSub(CString& nameLeft, bool bCreateIfNotExist);\r
23 \r
24         bool                    IsLeaf()const {return m_ShadowTree.empty();}\r
25         CString                 GetRefName()const\r
26         {\r
27                 if(m_pParent==NULL)\r
28                         return m_csRefName;\r
29                 return m_pParent->GetRefName()+"/"+m_csRefName;\r
30         }\r
31         bool                    IsFrom(const wchar_t* from)const\r
32         {\r
33                 return wcsncmp(GetRefName(),from,wcslen(from))==0;\r
34         }\r
35 \r
36         CShadowTree*    FindLeaf(CString partialRefName);\r
37 \r
38         CString                 m_csRefName;\r
39         CString                 m_csRefHash;\r
40         CString                 m_csDate;\r
41         CString                 m_csDate_Iso8601;\r
42         CString                 m_csAuthor;\r
43         CString                 m_csSubject;\r
44 \r
45         HTREEITEM               m_hTree;\r
46 \r
47         TShadowTreeMap  m_ShadowTree;\r
48         CShadowTree*    m_pParent;\r
49 };\r
50 typedef std::vector<CShadowTree*> VectorPShadowTree;\r
51 \r
52 class CBrowseRefsDlg : public CResizableStandAloneDialog\r
53 {\r
54         DECLARE_DYNAMIC(CBrowseRefsDlg)\r
55 \r
56 public:\r
57         CBrowseRefsDlg(CString cmdPath, CWnd* pParent = NULL);   // standard constructor\r
58         virtual ~CBrowseRefsDlg();\r
59 \r
60         enum eCmd\r
61         {\r
62                 eCmd_ViewLog = WM_APP,\r
63                 eCmd_AddRemote,\r
64                 eCmd_ManageRemotes,\r
65                 eCmd_CreateBranch,\r
66                 eCmd_CreateTag,\r
67                 eCmd_DeleteBranch,\r
68                 eCmd_DeleteRemoteBranch,\r
69                 eCmd_DeleteTag,\r
70                 eCmd_ShowReflog,\r
71                 eCmd_Diff,\r
72                 eCmd_Fetch,\r
73                 eCmd_Switch\r
74         };\r
75 \r
76         enum eCol\r
77         {\r
78                 eCol_Name,\r
79                 eCol_Date,\r
80                 eCol_Msg,\r
81                 eCol_Hash\r
82         };\r
83 \r
84 // Dialog Data\r
85         enum { IDD = IDD_DIALOG_BROWSE_REFS };\r
86 \r
87 protected:\r
88         virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\r
89 \r
90         DECLARE_MESSAGE_MAP()\r
91 public:\r
92         afx_msg void OnBnClickedOk();\r
93         virtual BOOL OnInitDialog();\r
94 \r
95         CString                 GetSelectedRef(bool onlyIfLeaf, bool pickFirstSelIfMultiSel = false);\r
96 \r
97         void                    Refresh(CString selectRef = CString());\r
98 \r
99         CShadowTree&    GetTreeNode(CString refName, CShadowTree* pTreePos=NULL, bool bCreateIfNotExist=false);\r
100 \r
101         void                    FillListCtrlForTreeNode(HTREEITEM treeNode);\r
102 \r
103         void                    FillListCtrlForShadowTree(CShadowTree* pTree, CString refNamePrefix, bool isFirstLevel);\r
104 \r
105         bool                    SelectRef(CString refName, bool bExactMatch);\r
106 \r
107         bool                    ConfirmDeleteRef(VectorPShadowTree& leafs);\r
108         bool                    DoDeleteRefs(VectorPShadowTree& leafs, bool bForce);\r
109         bool                    DoDeleteRef(CString completeRefName, bool bForce);\r
110 \r
111         CString                 GetFullRefName(CString partialRefName);\r
112 \r
113 private:\r
114         CString                 m_cmdPath;\r
115 \r
116         CShadowTree             m_TreeRoot;\r
117         CTreeCtrl               m_RefTreeCtrl;\r
118         CListCtrl               m_ListRefLeafs;\r
119 \r
120         int                             m_currSortCol;\r
121         bool                    m_currSortDesc;\r
122         afx_msg void OnTvnSelchangedTreeRef(NMHDR *pNMHDR, LRESULT *pResult);\r
123 public:\r
124 \r
125         afx_msg void OnContextMenu(CWnd* pWndFrom, CPoint point);\r
126 \r
127         void            OnContextMenu_ListRefLeafs(CPoint point);\r
128         void            OnContextMenu_RefTreeCtrl(CPoint point);\r
129 \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
136 \r
137 \r
138 public:\r
139         CString m_initialRef;\r
140         int             m_pickRef_Kind;\r
141         CString m_pickedRef;\r
142 \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
145 };\r