Skip to content

Commit 5dcbe95

Browse files
committed
WIP (44)
1 parent aef2efc commit 5dcbe95

File tree

6 files changed

+193
-149
lines changed

6 files changed

+193
-149
lines changed

src/WinWebDiff/Resource.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@
2121
#define IDM_COMPARE_SCREENSHOTS 130
2222
#define IDM_COMPARE_FULLSIZE_SCREENSHOTS 131
2323
#define IDM_COMPARE_HTML 132
24-
#define IDM_COMPARE_RESOURCE_TREE 133
25-
#define IDM_CLEAR_DISK_CACHE 134
26-
#define IDM_CLEAR_COOKIES 135
27-
#define IDM_CLEAR_BROWSING_HISTORY 136
28-
#define IDM_CLEAR_ALL_PROFILE 137
24+
#define IDM_COMPARE_TEXT 133
25+
#define IDM_COMPARE_RESOURCE_TREE 134
26+
#define IDM_CLEAR_DISK_CACHE 135
27+
#define IDM_CLEAR_COOKIES 136
28+
#define IDM_CLEAR_BROWSING_HISTORY 137
29+
#define IDM_CLEAR_ALL_PROFILE 138
2930
#define IDI_WINWEBDIFF 140
3031
#define IDI_SMALL 141
3132
#define IDC_WINWEBDIFF 142

src/WinWebDiff/WinWebDiff.cpp

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
345345
filenames.push_back(m_tempFiles.back().m_path);
346346
pfilenames[pane] = filenames[pane].c_str();
347347
}
348-
m_pWebDiffWindow->SaveScreenshots(pfilenames, wmId == IDM_COMPARE_FULLSIZE_SCREENSHOTS,
348+
m_pWebDiffWindow->SaveFiles(
349+
(wmId == IDM_COMPARE_FULLSIZE_SCREENSHOTS) ? IWebDiffWindow::FULLSIZE_SCREENSHOT : IWebDiffWindow::SCREENSHOT,
350+
pfilenames,
349351
Callback<IWebDiffCallback>([filenames](const WebDiffCallbackResult& result) -> HRESULT
350352
{
351353
CompareFiles(filenames, L"");
@@ -365,7 +367,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
365367
filenames.push_back(m_tempFiles.back().m_path);
366368
pfilenames[pane] = filenames[pane].c_str();
367369
}
368-
m_pWebDiffWindow->SaveHTMLs(pfilenames,
370+
m_pWebDiffWindow->SaveFiles(IWebDiffWindow::HTML, pfilenames,
369371
Callback<IWebDiffCallback>([filenames](const WebDiffCallbackResult& result) -> HRESULT
370372
{
371373
CompareFiles(filenames, L"/unpacker PrettifyHTML");
@@ -374,6 +376,26 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
374376
.Get());
375377
break;
376378
}
379+
case IDM_COMPARE_TEXT:
380+
{
381+
const wchar_t* pfilenames[3]{};
382+
std::vector<std::wstring> filenames;
383+
for (int pane = 0; pane < m_pWebDiffWindow->GetPaneCount(); pane++)
384+
{
385+
m_tempFiles.emplace_back();
386+
m_tempFiles.back().Create(L".txt");
387+
filenames.push_back(m_tempFiles.back().m_path);
388+
pfilenames[pane] = filenames[pane].c_str();
389+
}
390+
m_pWebDiffWindow->SaveFiles(IWebDiffWindow::TEXT, pfilenames,
391+
Callback<IWebDiffCallback>([filenames](const WebDiffCallbackResult& result) -> HRESULT
392+
{
393+
CompareFiles(filenames, L"");
394+
return S_OK;
395+
})
396+
.Get());
397+
break;
398+
}
377399
case IDM_COMPARE_RESOURCE_TREE:
378400
{
379401
const wchar_t* pdirnames[3]{};
@@ -385,7 +407,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
385407
dirnames.push_back(m_tempFolders.back().m_path);
386408
pdirnames[pane] = dirnames[pane].c_str();
387409
}
388-
m_pWebDiffWindow->SaveResourceTrees(pdirnames,
410+
m_pWebDiffWindow->SaveFiles(IWebDiffWindow::RESOURCETREE, pdirnames,
389411
Callback<IWebDiffCallback>([dirnames](const WebDiffCallbackResult& result) -> HRESULT
390412
{
391413
CompareFiles(dirnames, L"/r");
@@ -395,16 +417,16 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
395417
break;
396418
}
397419
case IDM_CLEAR_DISK_CACHE:
398-
m_pWebDiffWindow->ClearBrowsingData(-1, IWebDiffWindow::BrowsingDataKinds::DISK_CACHE);
420+
m_pWebDiffWindow->ClearBrowsingData(-1, IWebDiffWindow::BrowsingDataType::DISK_CACHE);
399421
break;
400422
case IDM_CLEAR_COOKIES:
401-
m_pWebDiffWindow->ClearBrowsingData(-1, IWebDiffWindow::BrowsingDataKinds::COOKIES);
423+
m_pWebDiffWindow->ClearBrowsingData(-1, IWebDiffWindow::BrowsingDataType::COOKIES);
402424
break;
403425
case IDM_CLEAR_BROWSING_HISTORY:
404-
m_pWebDiffWindow->ClearBrowsingData(-1, IWebDiffWindow::BrowsingDataKinds::BROWSING_HISTORY);
426+
m_pWebDiffWindow->ClearBrowsingData(-1, IWebDiffWindow::BrowsingDataType::BROWSING_HISTORY);
405427
break;
406428
case IDM_CLEAR_ALL_PROFILE:
407-
m_pWebDiffWindow->ClearBrowsingData(-1, IWebDiffWindow::BrowsingDataKinds::ALL_PROFILE);
429+
m_pWebDiffWindow->ClearBrowsingData(-1, IWebDiffWindow::BrowsingDataType::ALL_PROFILE);
408430
break;
409431
default:
410432
return DefWindowProc(hWnd, message, wParam, lParam);

src/WinWebDiff/WinWebDiff.rc

132 Bytes
Binary file not shown.

src/WinWebDiffLib/WebDiffWindow.hpp

Lines changed: 23 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class CWebDiffWindow : public IWebDiffWindow
4949
m_listeners.push_back(handler);
5050
}
5151

52-
void SetUserDataFolderType(UserDataFolderType userDataFolderType, bool perPane)
52+
void SetUserDataFolderType(UserdataFolderType userDataFolderType, bool perPane)
5353
{
5454
m_userDataFolderType = userDataFolderType;
5555
m_bUserDataFolderPerPane = perPane;
@@ -223,27 +223,27 @@ class CWebDiffWindow : public IWebDiffWindow
223223
return hr;
224224
}
225225

226-
HRESULT SaveScreenshot(int pane, const wchar_t* filename, bool fullSize, IWebDiffCallback* callback) override
226+
HRESULT SaveFile(int pane, FormatType kind, const wchar_t* filename, IWebDiffCallback* callback) override
227227
{
228228
if (pane < 0 || pane >= m_nPanes)
229229
return false;
230-
return m_webWindow[pane].SaveScreenshot(filename, fullSize, callback);
230+
return m_webWindow[pane].SaveFile(filename, kind, callback);
231231
}
232232

233-
HRESULT SaveScreenshots(const wchar_t* filenames[], bool fullSize, IWebDiffCallback* callback)
233+
HRESULT SaveFiles(FormatType kind, const wchar_t* filenames[], IWebDiffCallback* callback)
234234
{
235235
std::vector<std::wstring> sfilenames;
236236
for (int pane = 0; pane < m_nPanes; ++pane)
237237
sfilenames.push_back(filenames[pane]);
238238
ComPtr<IWebDiffCallback> callback2(callback);
239-
HRESULT hr = SaveScreenshot(0, sfilenames[0].c_str(), fullSize,
240-
Callback<IWebDiffCallback>([this, sfilenames, fullSize, callback2](const WebDiffCallbackResult& result) -> HRESULT
239+
HRESULT hr = SaveFile(0, kind, sfilenames[0].c_str(),
240+
Callback<IWebDiffCallback>([this, kind, sfilenames, callback2](const WebDiffCallbackResult& result) -> HRESULT
241241
{
242242
HRESULT hr = result.errorCode;
243243
if (SUCCEEDED(hr))
244244
{
245-
hr = SaveScreenshot(1, sfilenames[1].c_str(), fullSize,
246-
Callback<IWebDiffCallback>([this, sfilenames, fullSize, callback2](const WebDiffCallbackResult& result) -> HRESULT
245+
hr = SaveFile(1, kind, sfilenames[1].c_str(),
246+
Callback<IWebDiffCallback>([this, kind, sfilenames, callback2](const WebDiffCallbackResult& result) -> HRESULT
247247
{
248248
HRESULT hr = result.errorCode;
249249
if (m_nPanes < 3)
@@ -254,64 +254,7 @@ class CWebDiffWindow : public IWebDiffWindow
254254
}
255255
if (SUCCEEDED(hr))
256256
{
257-
hr = SaveScreenshot(2, sfilenames[2].c_str(), fullSize,
258-
Callback<IWebDiffCallback>([this, sfilenames, fullSize, callback2](const WebDiffCallbackResult& result) -> HRESULT
259-
{
260-
if (callback2)
261-
callback2->Invoke(result);
262-
return S_OK;
263-
}).Get());
264-
}
265-
if (FAILED(hr))
266-
{
267-
if (callback2)
268-
callback2->Invoke({ hr, nullptr });
269-
}
270-
return S_OK;
271-
}).Get());
272-
}
273-
if (FAILED(hr))
274-
{
275-
if (callback2)
276-
callback2->Invoke({ hr, nullptr });
277-
}
278-
return S_OK;
279-
}).Get());
280-
return hr;
281-
}
282-
283-
HRESULT SaveHTML(int pane, const wchar_t* filename, IWebDiffCallback* callback) override
284-
{
285-
if (pane < 0 || pane >= m_nPanes)
286-
return false;
287-
return m_webWindow[pane].SaveHTML(filename, callback);
288-
}
289-
290-
HRESULT SaveHTMLs(const wchar_t* filenames[], IWebDiffCallback* callback)
291-
{
292-
std::vector<std::wstring> sfilenames;
293-
for (int pane = 0; pane < m_nPanes; ++pane)
294-
sfilenames.push_back(filenames[pane]);
295-
ComPtr<IWebDiffCallback> callback2(callback);
296-
HRESULT hr = SaveHTML(0, sfilenames[0].c_str(),
297-
Callback<IWebDiffCallback>([this, sfilenames, callback2](const WebDiffCallbackResult& result) -> HRESULT
298-
{
299-
HRESULT hr = result.errorCode;
300-
if (SUCCEEDED(hr))
301-
{
302-
hr = SaveHTML(1, sfilenames[1].c_str(),
303-
Callback<IWebDiffCallback>([this, sfilenames, callback2](const WebDiffCallbackResult& result) -> HRESULT
304-
{
305-
HRESULT hr = result.errorCode;
306-
if (m_nPanes < 3)
307-
{
308-
if (callback2)
309-
callback2->Invoke(result);
310-
return S_OK;
311-
}
312-
if (SUCCEEDED(hr))
313-
{
314-
hr = SaveHTML(2, sfilenames[2].c_str(),
257+
hr = SaveFile(2, kind, sfilenames[2].c_str(),
315258
Callback<IWebDiffCallback>([this, sfilenames, callback2](const WebDiffCallbackResult& result) -> HRESULT
316259
{
317260
if (callback2)
@@ -333,67 +276,11 @@ class CWebDiffWindow : public IWebDiffWindow
333276
callback2->Invoke({ hr, nullptr });
334277
}
335278
return S_OK;
336-
}).Get());
337-
return hr;
338-
}
339-
340-
HRESULT SaveResourceTree(int pane, const wchar_t* dirname, IWebDiffCallback* callback) override {
341-
if (pane < 0 || pane >= m_nPanes)
342-
return false;
343-
return m_webWindow[pane].SaveResourceTree(dirname, callback);
344-
}
345-
346-
HRESULT SaveResourceTrees(const wchar_t* dirnames[], IWebDiffCallback* callback)
347-
{
348-
std::vector<std::wstring> sdirnames;
349-
for (int pane = 0; pane < m_nPanes; ++pane)
350-
sdirnames.push_back(dirnames[pane]);
351-
ComPtr<IWebDiffCallback> callback2(callback);
352-
HRESULT hr = SaveResourceTree(0, sdirnames[0].c_str(),
353-
Callback<IWebDiffCallback>([this, sdirnames, callback2](const WebDiffCallbackResult& result) -> HRESULT
354-
{
355-
HRESULT hr = result.errorCode;
356-
if (SUCCEEDED(hr))
357-
{
358-
hr = SaveResourceTree(1, sdirnames[1].c_str(),
359-
Callback<IWebDiffCallback>([this, sdirnames, callback2](const WebDiffCallbackResult& result) -> HRESULT
360-
{
361-
HRESULT hr = result.errorCode;
362-
if (m_nPanes < 3)
363-
{
364-
if (callback2)
365-
callback2->Invoke(result);
366-
return S_OK;
367-
}
368-
if (SUCCEEDED(hr))
369-
{
370-
hr = SaveResourceTree(2, sdirnames[2].c_str(),
371-
Callback<IWebDiffCallback>([this, sdirnames, callback2](const WebDiffCallbackResult& result) -> HRESULT
372-
{
373-
if (callback2)
374-
callback2->Invoke(result);
375-
return S_OK;
376-
}).Get());
377-
}
378-
if (FAILED(hr))
379-
{
380-
if (callback2)
381-
callback2->Invoke({ hr, nullptr });
382-
}
383-
return S_OK;
384-
}).Get());
385-
}
386-
if (FAILED(hr))
387-
{
388-
if (callback2)
389-
callback2->Invoke({ hr, nullptr });
390-
}
391-
return S_OK;
392-
}).Get());
279+
}).Get());
393280
return hr;
394281
}
395282

396-
HRESULT ClearBrowsingData(int pane, BrowsingDataKinds datakinds)
283+
HRESULT ClearBrowsingData(int pane, BrowsingDataType datakinds)
397284
{
398285
int spane = pane, epane = pane;
399286
if (pane < 0 || pane >= m_nPanes)
@@ -699,6 +586,16 @@ class CWebDiffWindow : public IWebDiffWindow
699586
return execCommand(L"redo");
700587
}
701588

589+
bool CanUndo() override
590+
{
591+
return true;
592+
}
593+
594+
bool CanRedo() override
595+
{
596+
return true;
597+
}
598+
702599
private:
703600

704601
std::wstring getFromClipboard() const
@@ -778,7 +675,7 @@ class CWebDiffWindow : public IWebDiffWindow
778675
{
779676
std::wstring path;
780677

781-
if (m_userDataFolderType == UserDataFolderType::APPDATA)
678+
if (m_userDataFolderType == UserdataFolderType::APPDATA)
782679
path = wil::ExpandEnvironmentStringsW(L"%APPDATA%\\WinMerge\\WinWebDiff\\").get();
783680
else
784681
path = wil::GetModuleFileNameW(GetModuleHandle(nullptr)).get() + std::wstring(L".WebView2");
@@ -1010,7 +907,7 @@ class CWebDiffWindow : public IWebDiffWindow
1010907
bool m_fitToWindow = true;
1011908
double m_zoom = 1.0;
1012909
std::wstring m_userAgent = L"";
1013-
UserDataFolderType m_userDataFolderType = UserDataFolderType::APPDATA;
910+
UserdataFolderType m_userDataFolderType = UserdataFolderType::APPDATA;
1014911
bool m_bUserDataFolderPerPane = true;
1015912
std::vector<ComPtr<IWebDiffEventHandler>> m_listeners;
1016913
int m_diffCount = 0;

0 commit comments

Comments
 (0)