OSDN Git Service

Fix Drop Move\rename problem.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / PatchViewDlg.cpp
1 // PatchViewDlg.cpp : implementation file\r
2 //\r
3 \r
4 #include "stdafx.h"\r
5 #include "TortoiseProc.h"\r
6 #include "PatchViewDlg.h"\r
7 #include "Registry.h"\r
8 #include "CommitDlg.h"\r
9 #include "UnicodeUtils.h"\r
10 // CPatchViewDlg dialog\r
11 \r
12 IMPLEMENT_DYNAMIC(CPatchViewDlg, CDialog)\r
13 \r
14 CPatchViewDlg::CPatchViewDlg(CWnd* pParent /*=NULL*/)\r
15         : CDialog(CPatchViewDlg::IDD, pParent)\r
16 {\r
17 \r
18 }\r
19 \r
20 CPatchViewDlg::~CPatchViewDlg()\r
21 {\r
22 }\r
23 \r
24 void CPatchViewDlg::DoDataExchange(CDataExchange* pDX)\r
25 {\r
26         CDialog::DoDataExchange(pDX);\r
27         DDX_Control(pDX, IDC_PATCH, m_ctrlPatchView);\r
28 }\r
29 \r
30 BEGIN_MESSAGE_MAP(CPatchViewDlg, CDialog)\r
31         ON_WM_SIZE()\r
32         ON_WM_MOVING()\r
33         ON_WM_DESTROY()\r
34 END_MESSAGE_MAP()\r
35 \r
36 void CPatchViewDlg::SetAStyle(int style, COLORREF fore, COLORREF back, int size, const char *face) \r
37 {\r
38         m_ctrlPatchView.Call(SCI_STYLESETFORE, style, fore);\r
39         m_ctrlPatchView.Call(SCI_STYLESETBACK, style, back);\r
40         if (size >= 1)\r
41                 m_ctrlPatchView.Call(SCI_STYLESETSIZE, style, size);\r
42         if (face) \r
43                 m_ctrlPatchView.Call(SCI_STYLESETFONT, style, reinterpret_cast<LPARAM>(face));\r
44 }\r
45 \r
46 \r
47 // CPatchViewDlg message handlers\r
48 \r
49 BOOL CPatchViewDlg::OnInitDialog()\r
50 {\r
51         CDialog::OnInitDialog();\r
52 \r
53         // TODO:  Add extra initialization here\r
54         m_ctrlPatchView.Init(*m_pProjectProperties);\r
55         m_ctrlPatchView.SetFont((CString)CRegString(_T("Software\\TortoiseGit\\LogFontName"), _T("Courier New")), (DWORD)CRegDWORD(_T("Software\\TortoiseGit\\LogFontSize"), 8));\r
56 \r
57         SetAStyle(STYLE_DEFAULT, ::GetSysColor(COLOR_WINDOWTEXT), ::GetSysColor(COLOR_WINDOW),\r
58                 // Reusing TortoiseBlame's setting which already have an user friendly\r
59                 // pane in TortoiseSVN's Settings dialog, while there is no such\r
60                 // pane for TortoiseUDiff.\r
61                 CRegStdDWORD(_T("Software\\TortoiseGit\\BlameFontSize"), 10),\r
62                 WideToMultibyte(CRegStdString(_T("Software\\TortoiseGit\\BlameFontName"), _T("Courier New"))).c_str());\r
63 \r
64         m_ctrlPatchView.Call(SCI_SETTABWIDTH, 4);\r
65         m_ctrlPatchView.Call(SCI_SETREADONLY, TRUE);\r
66         //LRESULT pix = m_ctrlPatchView.Call(SCI_TEXTWIDTH, STYLE_LINENUMBER, (LPARAM)"_99999");\r
67         //m_ctrlPatchView.Call(SCI_SETMARGINWIDTHN, 0, pix);\r
68         //m_ctrlPatchView.Call(SCI_SETMARGINWIDTHN, 1);\r
69         //m_ctrlPatchView.Call(SCI_SETMARGINWIDTHN, 2);\r
70         //Set the default windows colors for edit controls\r
71         m_ctrlPatchView.Call(SCI_STYLESETFORE, STYLE_DEFAULT, ::GetSysColor(COLOR_WINDOWTEXT));\r
72         m_ctrlPatchView.Call(SCI_STYLESETBACK, STYLE_DEFAULT, ::GetSysColor(COLOR_WINDOW));\r
73         m_ctrlPatchView.Call(SCI_SETSELFORE, TRUE, ::GetSysColor(COLOR_HIGHLIGHTTEXT));\r
74         m_ctrlPatchView.Call(SCI_SETSELBACK, TRUE, ::GetSysColor(COLOR_HIGHLIGHT));\r
75         m_ctrlPatchView.Call(SCI_SETCARETFORE, ::GetSysColor(COLOR_WINDOWTEXT));\r
76 \r
77         //SendEditor(SCI_SETREADONLY, FALSE);\r
78         m_ctrlPatchView.Call(SCI_CLEARALL);\r
79         m_ctrlPatchView.Call(EM_EMPTYUNDOBUFFER);\r
80         m_ctrlPatchView.Call(SCI_SETSAVEPOINT);\r
81         m_ctrlPatchView.Call(SCI_CANCEL);\r
82         m_ctrlPatchView.Call(SCI_SETUNDOCOLLECTION, 0);\r
83 \r
84         m_ctrlPatchView.Call(SCI_SETUNDOCOLLECTION, 1);\r
85         m_ctrlPatchView.Call(SCI_SETWRAPMODE,SC_WRAP_NONE);\r
86         \r
87         //::SetFocus(m_hWndEdit);\r
88         m_ctrlPatchView.Call(EM_EMPTYUNDOBUFFER);\r
89         m_ctrlPatchView.Call(SCI_SETSAVEPOINT);\r
90         m_ctrlPatchView.Call(SCI_GOTOPOS, 0);\r
91 \r
92         m_ctrlPatchView.Call(SCI_CLEARDOCUMENTSTYLE, 0, 0);\r
93         m_ctrlPatchView.Call(SCI_SETSTYLEBITS, 5, 0);\r
94 \r
95         //SetAStyle(SCE_DIFF_DEFAULT, RGB(0, 0, 0));\r
96         SetAStyle(SCE_DIFF_COMMAND, RGB(0x0A, 0x24, 0x36));\r
97         SetAStyle(SCE_DIFF_POSITION, RGB(0xFF, 0, 0));\r
98         SetAStyle(SCE_DIFF_HEADER, RGB(0x80, 0, 0), RGB(0xFF, 0xFF, 0x80));\r
99         SetAStyle(SCE_DIFF_COMMENT, RGB(0, 0x80, 0));\r
100         m_ctrlPatchView.Call(SCI_STYLESETBOLD, SCE_DIFF_COMMENT, TRUE);\r
101         SetAStyle(SCE_DIFF_DELETED, ::GetSysColor(COLOR_WINDOWTEXT), RGB(0xFF, 0x80, 0x80));\r
102         SetAStyle(SCE_DIFF_ADDED, ::GetSysColor(COLOR_WINDOWTEXT), RGB(0x80, 0xFF, 0x80));\r
103 \r
104         m_ctrlPatchView.Call(SCI_SETLEXER, SCLEX_DIFF);\r
105         m_ctrlPatchView.Call(SCI_SETKEYWORDS, 0, (LPARAM)"revision");\r
106         m_ctrlPatchView.Call(SCI_COLOURISE, 0, -1);\r
107 \r
108         return TRUE;  // return TRUE unless you set the focus to a control\r
109         // EXCEPTION: OCX Property Pages should return FALSE\r
110 }\r
111 \r
112 void CPatchViewDlg::OnSize(UINT nType, int cx, int cy)\r
113 {\r
114         CDialog::OnSize(nType, cx, cy);\r
115 \r
116         // TODO: Add your message handler code here\r
117         if (this->IsWindowVisible())\r
118         {\r
119                 CRect rect;\r
120                 GetClientRect(rect);\r
121                 GetDlgItem(IDC_PATCH)->MoveWindow(rect.left, rect.top, cx, cy);\r
122         }\r
123 }\r
124 \r
125 void CPatchViewDlg::OnMoving(UINT fwSide, LPRECT pRect)\r
126 {\r
127         // TODO: Add your message handler code here\r
128 #define STICKYSIZE 5\r
129         RECT parentRect;\r
130         this->m_ParentCommitDlg->GetWindowRect(&parentRect);\r
131         if (abs(parentRect.right - pRect->left) < STICKYSIZE)\r
132         {\r
133                 int width = pRect->right - pRect->left;\r
134                 pRect->left = parentRect.right;\r
135                 pRect->right = pRect->left + width;\r
136         }\r
137         CDialog::OnMoving(fwSide, pRect);\r
138 }\r
139 \r
140 void CPatchViewDlg::OnDestroy()\r
141 {\r
142         CDialog::OnDestroy();\r
143 \r
144         this->m_ParentCommitDlg->ShowViewPatchText(true);\r
145         // TODO: Add your message handler code here\r
146 }\r