1 // TortoiseSVN - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2008 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "TortoiseProc.h"
22 #include "MessageBox.h"
23 #include "..\..\TGitCache\CacheInterface.h"
24 #include "CommonResource.h"
27 IMPLEMENT_DYNAMIC(CSettings
, CTreePropSheet
)
28 CSettings::CSettings(UINT nIDCaption
, CWnd
* pParentWnd
, UINT iSelectPage
)
29 :CTreePropSheet(nIDCaption
, pParentWnd
, iSelectPage
)
31 m_hIcon
= AfxGetApp()->LoadIcon(IDR_MAINFRAME
);
35 CSettings::~CSettings()
40 void CSettings::AddPropPages()
42 m_pMainPage
= new CSetMainPage();
43 m_pOverlayPage
= new CSetOverlayPage();
44 m_pOverlaysPage
= new CSetOverlayIcons();
45 m_pProxyPage
= new CSetProxyPage();
46 m_pProgsDiffPage
= new CSettingsProgsDiff();
47 m_pProgsMergePage
= new CSettingsProgsMerge();
48 m_pProgsUniDiffPage
= new CSettingsProgsUniDiff();
49 m_pLookAndFeelPage
= new CSetLookAndFeelPage();
50 m_pDialogsPage
= new CSetDialogs();
51 m_pMiscPage
= new CSetMisc();
52 m_pRevisionGraphPage
= new CSettingsRevisionGraph();
53 // m_pLogCachePage = new CSetLogCache();
54 // m_pLogCacheListPage = new CSettingsLogCaches();
55 m_pColorsPage
= new CSettingsColors();
56 m_pColorsPage2
= new CSettingsColors2();
57 m_pColorsPage3
= new CSettingsColors3();
58 m_pSavedPage
= new CSetSavedDataPage();
59 // m_pHooksPage = new CSetHooks();
60 m_pBugTraqPage
= new CSetBugTraq();
61 m_pTBlamePage
= new CSettingsTBlame();
62 m_pGitConfig
= new CSettingGitConfig();
63 m_pGitRemote
= new CSettingGitRemote();
66 SetPageIcon(m_pMainPage
, m_pMainPage
->GetIconID());
67 SetPageIcon(m_pOverlayPage
, m_pOverlayPage
->GetIconID());
68 SetPageIcon(m_pOverlaysPage
, m_pOverlaysPage
->GetIconID());
69 SetPageIcon(m_pProxyPage
, m_pProxyPage
->GetIconID());
70 SetPageIcon(m_pProgsDiffPage
, m_pProgsDiffPage
->GetIconID());
71 SetPageIcon(m_pProgsMergePage
, m_pProgsMergePage
->GetIconID());
72 SetPageIcon(m_pProgsUniDiffPage
, m_pProgsUniDiffPage
->GetIconID());
73 SetPageIcon(m_pLookAndFeelPage
, m_pLookAndFeelPage
->GetIconID());
74 SetPageIcon(m_pDialogsPage
, m_pDialogsPage
->GetIconID());
75 SetPageIcon(m_pRevisionGraphPage
, m_pRevisionGraphPage
->GetIconID());
76 SetPageIcon(m_pMiscPage
, m_pMiscPage
->GetIconID());
77 //// SetPageIcon(m_pLogCachePage, m_pLogCachePage->GetIconID());
78 // SetPageIcon(m_pLogCacheListPage, m_pLogCacheListPage->GetIconID());
79 SetPageIcon(m_pColorsPage
, m_pColorsPage
->GetIconID());
80 SetPageIcon(m_pColorsPage2
, m_pColorsPage2
->GetIconID());
81 SetPageIcon(m_pColorsPage3
, m_pColorsPage3
->GetIconID());
83 SetPageIcon(m_pSavedPage
, m_pSavedPage
->GetIconID());
84 // SetPageIcon(m_pHooksPage, m_pHooksPage->GetIconID());
85 SetPageIcon(m_pBugTraqPage
, m_pBugTraqPage
->GetIconID());
86 SetPageIcon(m_pTBlamePage
, m_pTBlamePage
->GetIconID());
89 AddPage(m_pOverlayPage
);
90 AddPage(m_pOverlaysPage
);
91 AddPage(m_pProxyPage
);
92 AddPage(m_pProgsDiffPage
);
93 AddPage(m_pProgsMergePage
);
94 AddPage(m_pProgsUniDiffPage
);
95 AddPage(m_pLookAndFeelPage
);
96 AddPage(m_pDialogsPage
);
98 AddPage(m_pRevisionGraphPage
);
99 AddPage(m_pColorsPage
);
100 AddPage(m_pColorsPage2
);
101 AddPage(m_pColorsPage3
);
102 AddPage(m_pSavedPage
);
104 AddPage(m_pGitConfig
);
105 AddPage(m_pGitRemote
);
106 // AddPage(m_pGitRemotem_pLogCachePage);
107 // AddPage(m_pLogCacheListPage);
108 // AddPage(m_pHooksPage);
109 AddPage(m_pBugTraqPage
);
110 AddPage(m_pTBlamePage
);
113 void CSettings::RemovePropPages()
116 delete m_pOverlayPage
;
117 delete m_pOverlaysPage
;
119 delete m_pProgsDiffPage
;
120 delete m_pProgsMergePage
;
121 delete m_pProgsUniDiffPage
;
122 delete m_pLookAndFeelPage
;
123 delete m_pDialogsPage
;
124 delete m_pRevisionGraphPage
;
126 //// delete m_pLogCachePage;
127 //// delete m_pLogCacheListPage;
128 delete m_pColorsPage
;
129 delete m_pColorsPage2
;
130 delete m_pColorsPage3
;
132 // delete m_pHooksPage;
133 delete m_pBugTraqPage
;
134 delete m_pTBlamePage
;
141 void CSettings::HandleRestart()
143 int restart
= ISettingsPropPage::Restart_None
;
144 restart
|= m_pMainPage
->GetRestart();
145 restart
|= m_pOverlayPage
->GetRestart();
146 restart
|= m_pOverlaysPage
->GetRestart();
147 restart
|= m_pProxyPage
->GetRestart();
148 restart
|= m_pProgsDiffPage
->GetRestart();
149 restart
|= m_pProgsMergePage
->GetRestart();
150 restart
|= m_pProgsUniDiffPage
->GetRestart();
151 restart
|= m_pLookAndFeelPage
->GetRestart();
152 restart
|= m_pDialogsPage
->GetRestart();
153 restart
|= m_pRevisionGraphPage
->GetRestart();
154 restart
|= m_pMiscPage
->GetRestart();
155 //// restart |= m_pLogCachePage->GetRestart();
156 // restart |= m_pLogCacheListPage->GetRestart();
157 restart
|= m_pColorsPage
->GetRestart();
158 restart
|= m_pColorsPage2
->GetRestart();
159 restart
|= m_pColorsPage3
->GetRestart();
160 restart
|= m_pSavedPage
->GetRestart();
161 //// restart |= m_pHooksPage->GetRestart();
162 restart
|= m_pBugTraqPage
->GetRestart();
163 restart
|= m_pTBlamePage
->GetRestart();
165 restart
|= m_pGitConfig
->GetRestart();
166 restart
|= m_pGitRemote
->GetRestart();
168 if (restart
& ISettingsPropPage::Restart_System
)
171 ::SendMessageTimeout(HWND_BROADCAST
, WM_SETTINGCHANGE
, 0, 0, SMTO_ABORTIFHUNG
, 20, &res
);
172 CMessageBox::Show(NULL
, IDS_SETTINGS_RESTARTSYSTEM
, IDS_APPNAME
, MB_ICONINFORMATION
);
174 if (restart
& ISettingsPropPage::Restart_Cache
)
177 ::SendMessageTimeout(HWND_BROADCAST
, WM_SETTINGCHANGE
, 0, 0, SMTO_ABORTIFHUNG
, 20, &res
);
178 // tell the cache to refresh everything
179 HANDLE hPipe
= CreateFile(
180 GetCacheCommandPipeName(), // pipe name
181 GENERIC_READ
| // read and write access
184 NULL
, // default security attributes
185 OPEN_EXISTING
, // opens existing pipe
186 FILE_FLAG_OVERLAPPED
, // default attributes
187 NULL
); // no template file
190 if (hPipe
!= INVALID_HANDLE_VALUE
)
192 // The pipe connected; change to message-read mode.
195 dwMode
= PIPE_READMODE_MESSAGE
;
196 if (SetNamedPipeHandleState(
197 hPipe
, // pipe handle
198 &dwMode
, // new pipe mode
199 NULL
, // don't set maximum bytes
200 NULL
)) // don't set maximum time
203 TSVNCacheCommand cmd
;
204 SecureZeroMemory(&cmd
, sizeof(TSVNCacheCommand
));
205 cmd
.command
= TSVNCACHECOMMAND_REFRESHALL
;
206 BOOL fSuccess
= WriteFile(
207 hPipe
, // handle to pipe
208 &cmd
, // buffer to write from
209 sizeof(cmd
), // number of bytes to write
210 &cbWritten
, // number of bytes written
211 NULL
); // not overlapped I/O
213 if (! fSuccess
|| sizeof(cmd
) != cbWritten
)
215 DisconnectNamedPipe(hPipe
);
217 hPipe
= INVALID_HANDLE_VALUE
;
219 if (hPipe
!= INVALID_HANDLE_VALUE
)
221 // now tell the cache we don't need it's command thread anymore
223 TSVNCacheCommand cmd
;
224 SecureZeroMemory(&cmd
, sizeof(TSVNCacheCommand
));
225 cmd
.command
= TSVNCACHECOMMAND_END
;
227 hPipe
, // handle to pipe
228 &cmd
, // buffer to write from
229 sizeof(cmd
), // number of bytes to write
230 &cbWritten
, // number of bytes written
231 NULL
); // not overlapped I/O
232 DisconnectNamedPipe(hPipe
);
234 hPipe
= INVALID_HANDLE_VALUE
;
239 ATLTRACE("SetNamedPipeHandleState failed");
246 BEGIN_MESSAGE_MAP(CSettings
, CTreePropSheet
)
247 ON_WM_QUERYDRAGICON()
251 BOOL
CSettings::OnInitDialog()
253 BOOL bResult
= CTreePropSheet::OnInitDialog();
255 SetIcon(m_hIcon
, TRUE
); // Set big icon
256 SetIcon(m_hIcon
, FALSE
); // Set small icon
258 CenterWindow(CWnd::FromHandle(hWndExplorer
));
262 void CSettings::OnPaint()
266 CPaintDC
dc(this); // device context for painting
268 SendMessage(WM_ICONERASEBKGND
, reinterpret_cast<WPARAM
>(dc
.GetSafeHdc()), 0);
270 // Center icon in client rectangle
271 int cxIcon
= GetSystemMetrics(SM_CXICON
);
272 int cyIcon
= GetSystemMetrics(SM_CYICON
);
274 GetClientRect(&rect
);
275 int x
= (rect
.Width() - cxIcon
+ 1) / 2;
276 int y
= (rect
.Height() - cyIcon
+ 1) / 2;
279 dc
.DrawIcon(x
, y
, m_hIcon
);
283 CTreePropSheet::OnPaint();
287 HCURSOR
CSettings::OnQueryDragIcon()
289 return static_cast<HCURSOR
>(m_hIcon
);