OSDN Git Service

Add TortoiseProc
[tortoisegit/TortoiseGitJp.git] / TortoiseProc / Settings / SetLookAndFeelPage.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2008 - TortoiseSVN\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 //\r
19 #include "stdafx.h"\r
20 #include "TortoiseProc.h"\r
21 #include "Globals.h"\r
22 #include "ShellUpdater.h"\r
23 #include "AppUtils.h"\r
24 #include "StringUtils.h"\r
25 #include ".\setlookandfeelpage.h"\r
26 #include "MessageBox.h"\r
27 #include "XPTheme.h"\r
28 \r
29 IMPLEMENT_DYNAMIC(CSetLookAndFeelPage, ISettingsPropPage)\r
30 CSetLookAndFeelPage::CSetLookAndFeelPage()\r
31         : ISettingsPropPage(CSetLookAndFeelPage::IDD)\r
32         , m_bGetLockTop(FALSE)\r
33         , m_bBlock(false)\r
34 {\r
35         m_regTopmenu = CRegDWORD(_T("Software\\TortoiseSVN\\ContextMenuEntries"), MENUCHECKOUT | MENUUPDATE | MENUCOMMIT);\r
36         m_regTopmenuhigh = CRegDWORD(_T("Software\\TortoiseSVN\\ContextMenuEntrieshigh"), 0);\r
37 \r
38         m_topmenu = unsigned __int64(DWORD(m_regTopmenuhigh))<<32;\r
39         m_topmenu |= unsigned __int64(DWORD(m_regTopmenu));\r
40 \r
41         m_regGetLockTop = CRegDWORD(_T("Software\\TortoiseSVN\\GetLockTop"), TRUE);\r
42         m_bGetLockTop = m_regGetLockTop;\r
43 \r
44         m_regNoContextPaths = CRegString(_T("Software\\TortoiseSVN\\NoContextPaths"), _T(""));\r
45         m_sNoContextPaths = m_regNoContextPaths;\r
46         m_sNoContextPaths.Replace(_T("\n"), _T("\r\n"));\r
47 }\r
48 \r
49 CSetLookAndFeelPage::~CSetLookAndFeelPage()\r
50 {\r
51 }\r
52 \r
53 void CSetLookAndFeelPage::DoDataExchange(CDataExchange* pDX)\r
54 {\r
55         ISettingsPropPage::DoDataExchange(pDX);\r
56         DDX_Control(pDX, IDC_MENULIST, m_cMenuList);\r
57         DDX_Check(pDX, IDC_GETLOCKTOP, m_bGetLockTop);\r
58         DDX_Text(pDX, IDC_NOCONTEXTPATHS, m_sNoContextPaths);\r
59 }\r
60 \r
61 \r
62 BEGIN_MESSAGE_MAP(CSetLookAndFeelPage, ISettingsPropPage)\r
63         ON_NOTIFY(LVN_ITEMCHANGED, IDC_MENULIST, OnLvnItemchangedMenulist)\r
64         ON_BN_CLICKED(IDC_GETLOCKTOP, OnChange)\r
65         ON_EN_CHANGE(IDC_NOCONTEXTPATHS, &CSetLookAndFeelPage::OnEnChangeNocontextpaths)\r
66 END_MESSAGE_MAP()\r
67 \r
68 \r
69 BOOL CSetLookAndFeelPage::OnInitDialog()\r
70 {\r
71         ISettingsPropPage::OnInitDialog();\r
72 \r
73         m_tooltips.Create(this);\r
74         m_tooltips.AddTool(IDC_MENULIST, IDS_SETTINGS_MENULAYOUT_TT);\r
75         m_tooltips.AddTool(IDC_GETLOCKTOP, IDS_SETTINGS_GETLOCKTOP_TT);\r
76         m_tooltips.AddTool(IDC_NOCONTEXTPATHS, IDS_SETTINGS_EXCLUDECONTEXTLIST_TT);\r
77 \r
78         m_cMenuList.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);\r
79 \r
80         m_cMenuList.DeleteAllItems();\r
81         int c = ((CHeaderCtrl*)(m_cMenuList.GetDlgItem(0)))->GetItemCount()-1;\r
82         while (c>=0)\r
83                 m_cMenuList.DeleteColumn(c--);\r
84         m_cMenuList.InsertColumn(0, _T(""));\r
85 \r
86         CXPTheme theme;\r
87         theme.SetWindowTheme(m_cMenuList.GetSafeHwnd(), L"Explorer", NULL);\r
88 \r
89         m_cMenuList.SetRedraw(false);\r
90 \r
91         m_imgList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 4, 1);\r
92 \r
93         m_bBlock = true;\r
94         InsertItem(IDS_MENUCHECKOUT, IDI_CHECKOUT, MENUCHECKOUT);\r
95         InsertItem(IDS_MENUUPDATE, IDI_UPDATE, MENUUPDATE);\r
96         InsertItem(IDS_MENUCOMMIT, IDI_COMMIT, MENUCOMMIT);\r
97         InsertItem(IDS_MENUDIFF, IDI_DIFF, MENUDIFF);\r
98         InsertItem(IDS_MENUPREVDIFF, IDI_DIFF, MENUPREVDIFF);\r
99         InsertItem(IDS_MENUURLDIFF, IDI_DIFF, MENUURLDIFF);\r
100         InsertItem(IDS_MENULOG, IDI_LOG, MENULOG);\r
101         InsertItem(IDS_MENUREPOBROWSE, IDI_REPOBROWSE, MENUREPOBROWSE);\r
102         InsertItem(IDS_MENUSHOWCHANGED, IDI_SHOWCHANGED, MENUSHOWCHANGED);\r
103         InsertItem(IDS_MENUREVISIONGRAPH, IDI_REVISIONGRAPH, MENUREVISIONGRAPH);\r
104         InsertItem(IDS_MENUCONFLICT, IDI_CONFLICT, MENUCONFLICTEDITOR);\r
105         InsertItem(IDS_MENURESOLVE, IDI_RESOLVE, MENURESOLVE);\r
106         InsertItem(IDS_MENUUPDATEEXT, IDI_UPDATE, MENUUPDATEEXT);\r
107         InsertItem(IDS_MENURENAME, IDI_RENAME, MENURENAME);\r
108         InsertItem(IDS_MENUREMOVE, IDI_DELETE, MENUREMOVE);\r
109         InsertItem(IDS_MENUREVERT, IDI_REVERT, MENUREVERT);\r
110         InsertItem(IDS_MENUDELUNVERSIONED, IDI_DELUNVERSIONED, MENUDELUNVERSIONED);\r
111         InsertItem(IDS_MENUCLEANUP, IDI_CLEANUP, MENUCLEANUP);\r
112         InsertItem(IDS_MENU_LOCK, IDI_LOCK, MENULOCK);\r
113         InsertItem(IDS_MENU_UNLOCK, IDI_UNLOCK, MENUUNLOCK);\r
114         InsertItem(IDS_MENUBRANCH, IDI_COPY, MENUCOPY);\r
115         InsertItem(IDS_MENUSWITCH, IDI_SWITCH, MENUSWITCH);\r
116         InsertItem(IDS_MENUMERGE, IDI_MERGE, MENUMERGE);\r
117         InsertItem(IDS_MENUEXPORT, IDI_EXPORT, MENUEXPORT);\r
118         InsertItem(IDS_MENURELOCATE, IDI_RELOCATE, MENURELOCATE);\r
119         InsertItem(IDS_MENUCREATEREPOS, IDI_CREATEREPOS, MENUCREATEREPOS);\r
120         InsertItem(IDS_MENUADD, IDI_ADD, MENUADD);\r
121         InsertItem(IDS_MENUIMPORT, IDI_IMPORT, MENUIMPORT);\r
122         InsertItem(IDS_MENUBLAME, IDI_BLAME, MENUBLAME);\r
123         InsertItem(IDS_MENUIGNORE, IDI_IGNORE, MENUIGNORE);\r
124         InsertItem(IDS_MENUCREATEPATCH, IDI_CREATEPATCH, MENUCREATEPATCH);\r
125         InsertItem(IDS_MENUAPPLYPATCH, IDI_PATCH, MENUAPPLYPATCH);\r
126         InsertItem(IDS_MENUPROPERTIES, IDI_PROPERTIES, MENUPROPERTIES);\r
127         InsertItem(IDS_MENUCLIPPASTE, IDI_CLIPPASTE, MENUCLIPPASTE);\r
128         m_bBlock = false;\r
129 \r
130         m_cMenuList.SetImageList(&m_imgList, LVSIL_SMALL);\r
131         int mincol = 0;\r
132         int maxcol = ((CHeaderCtrl*)(m_cMenuList.GetDlgItem(0)))->GetItemCount()-1;\r
133         int col;\r
134         for (col = mincol; col <= maxcol; col++)\r
135         {\r
136                 m_cMenuList.SetColumnWidth(col,LVSCW_AUTOSIZE_USEHEADER);\r
137         }\r
138         m_cMenuList.SetRedraw(true);\r
139 \r
140         UpdateData(FALSE);\r
141 \r
142         return TRUE;\r
143 }\r
144 \r
145 BOOL CSetLookAndFeelPage::PreTranslateMessage(MSG* pMsg)\r
146 {\r
147         m_tooltips.RelayEvent(pMsg);\r
148         return ISettingsPropPage::PreTranslateMessage(pMsg);\r
149 }\r
150 \r
151 BOOL CSetLookAndFeelPage::OnApply()\r
152 {\r
153         UpdateData();\r
154     Store ((DWORD)(m_topmenu & 0xFFFFFFFF),     m_regTopmenu);\r
155     Store ((DWORD)(m_topmenu >> 32), m_regTopmenuhigh);\r
156     Store (m_bGetLockTop, m_regGetLockTop);\r
157 \r
158         m_sNoContextPaths.Replace(_T("\r"), _T(""));\r
159         if (m_sNoContextPaths.Right(1).Compare(_T("\n"))!=0)\r
160                 m_sNoContextPaths += _T("\n");\r
161 \r
162         Store (m_sNoContextPaths, m_regNoContextPaths);\r
163 \r
164         SetModified(FALSE);\r
165         return ISettingsPropPage::OnApply();\r
166 }\r
167 \r
168 void CSetLookAndFeelPage::InsertItem(UINT nTextID, UINT nIconID, unsigned __int64 dwFlags)\r
169 {\r
170         HICON hIcon = reinterpret_cast<HICON>(::LoadImage(AfxGetResourceHandle(),\r
171                 MAKEINTRESOURCE(nIconID),\r
172                 IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT ));\r
173         int nImage = m_imgList.Add(hIcon);\r
174         CString temp;\r
175         temp.LoadString(nTextID);\r
176         CStringUtils::RemoveAccelerators(temp);\r
177         int nIndex = m_cMenuList.GetItemCount();\r
178         m_cMenuList.InsertItem(nIndex, temp, nImage);\r
179         m_cMenuList.SetCheck(nIndex, !!(m_topmenu & dwFlags));\r
180 }\r
181 \r
182 void CSetLookAndFeelPage::OnLvnItemchangedMenulist(NMHDR * /*pNMHDR*/, LRESULT *pResult)\r
183 {\r
184         if (m_bBlock)\r
185                 return;\r
186         SetModified(TRUE);\r
187         if (m_cMenuList.GetItemCount() > 0)\r
188         {\r
189                 int i=0;\r
190                 m_topmenu = 0;\r
191                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCHECKOUT : 0;\r
192                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUUPDATE : 0;\r
193                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCOMMIT : 0;\r
194                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUDIFF : 0;\r
195                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUPREVDIFF : 0;\r
196                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUURLDIFF : 0;\r
197                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENULOG : 0;\r
198                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUREPOBROWSE : 0;\r
199                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUSHOWCHANGED : 0;\r
200                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUREVISIONGRAPH : 0;\r
201                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCONFLICTEDITOR : 0;\r
202                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENURESOLVE : 0;\r
203                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUUPDATEEXT : 0;\r
204                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENURENAME : 0;\r
205                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUREMOVE : 0;\r
206                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUREVERT : 0;\r
207                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUDELUNVERSIONED : 0;\r
208                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCLEANUP : 0;\r
209                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENULOCK : 0;\r
210                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUUNLOCK : 0;\r
211                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCOPY : 0;\r
212                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUSWITCH : 0;\r
213                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUMERGE : 0;\r
214                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUEXPORT : 0;\r
215                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENURELOCATE : 0;\r
216                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCREATEREPOS : 0;\r
217                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUADD : 0;\r
218                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUIMPORT : 0;\r
219                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUBLAME : 0;\r
220                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUIGNORE : 0;\r
221                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCREATEPATCH : 0;\r
222                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUAPPLYPATCH : 0;\r
223                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUPROPERTIES : 0;\r
224                 m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCLIPPASTE : 0;\r
225         }\r
226         *pResult = 0;\r
227 }\r
228 \r
229 void CSetLookAndFeelPage::OnChange()\r
230 {\r
231         SetModified();\r
232 }\r
233 \r
234 void CSetLookAndFeelPage::OnEnChangeNocontextpaths()\r
235 {\r
236         SetModified();\r
237 }\r
238 \r