1 // TortoiseSVN - a Windows shell extension for easy version control
\r
3 // Copyright (C) 2003-2008 - TortoiseSVN
\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
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
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
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
29 IMPLEMENT_DYNAMIC(CSetLookAndFeelPage, ISettingsPropPage)
\r
30 CSetLookAndFeelPage::CSetLookAndFeelPage()
\r
31 : ISettingsPropPage(CSetLookAndFeelPage::IDD)
\r
32 , m_bGetLockTop(FALSE)
\r
35 m_regTopmenu = CRegDWORD(_T("Software\\TortoiseSVN\\ContextMenuEntries"), MENUCHECKOUT | MENUUPDATE | MENUCOMMIT);
\r
36 m_regTopmenuhigh = CRegDWORD(_T("Software\\TortoiseSVN\\ContextMenuEntrieshigh"), 0);
\r
38 m_topmenu = unsigned __int64(DWORD(m_regTopmenuhigh))<<32;
\r
39 m_topmenu |= unsigned __int64(DWORD(m_regTopmenu));
\r
41 m_regGetLockTop = CRegDWORD(_T("Software\\TortoiseSVN\\GetLockTop"), TRUE);
\r
42 m_bGetLockTop = m_regGetLockTop;
\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
49 CSetLookAndFeelPage::~CSetLookAndFeelPage()
\r
53 void CSetLookAndFeelPage::DoDataExchange(CDataExchange* pDX)
\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
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
69 BOOL CSetLookAndFeelPage::OnInitDialog()
\r
71 ISettingsPropPage::OnInitDialog();
\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
78 m_cMenuList.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
\r
80 m_cMenuList.DeleteAllItems();
\r
81 int c = ((CHeaderCtrl*)(m_cMenuList.GetDlgItem(0)))->GetItemCount()-1;
\r
83 m_cMenuList.DeleteColumn(c--);
\r
84 m_cMenuList.InsertColumn(0, _T(""));
\r
87 theme.SetWindowTheme(m_cMenuList.GetSafeHwnd(), L"Explorer", NULL);
\r
89 m_cMenuList.SetRedraw(false);
\r
91 m_imgList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 4, 1);
\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
130 m_cMenuList.SetImageList(&m_imgList, LVSIL_SMALL);
\r
132 int maxcol = ((CHeaderCtrl*)(m_cMenuList.GetDlgItem(0)))->GetItemCount()-1;
\r
134 for (col = mincol; col <= maxcol; col++)
\r
136 m_cMenuList.SetColumnWidth(col,LVSCW_AUTOSIZE_USEHEADER);
\r
138 m_cMenuList.SetRedraw(true);
\r
145 BOOL CSetLookAndFeelPage::PreTranslateMessage(MSG* pMsg)
\r
147 m_tooltips.RelayEvent(pMsg);
\r
148 return ISettingsPropPage::PreTranslateMessage(pMsg);
\r
151 BOOL CSetLookAndFeelPage::OnApply()
\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
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
162 Store (m_sNoContextPaths, m_regNoContextPaths);
\r
164 SetModified(FALSE);
\r
165 return ISettingsPropPage::OnApply();
\r
168 void CSetLookAndFeelPage::InsertItem(UINT nTextID, UINT nIconID, unsigned __int64 dwFlags)
\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
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
182 void CSetLookAndFeelPage::OnLvnItemchangedMenulist(NMHDR * /*pNMHDR*/, LRESULT *pResult)
\r
187 if (m_cMenuList.GetItemCount() > 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
229 void CSetLookAndFeelPage::OnChange()
\r
234 void CSetLookAndFeelPage::OnEnChangeNocontextpaths()
\r