mirror of
https://github.com/microsoft/playwright.git
synced 2024-12-17 00:04:50 +03:00
a3f34fb4b7
This leaves our firefox diff to gecko instrumentation changes only. Drive-by: rename webkit "src" folder into "embedder".
154 lines
4.5 KiB
C++
154 lines
4.5 KiB
C++
/*
|
|
* Copyright (C) 2018 Sony Interactive Entertainment Inc.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
class Dialog {
|
|
public:
|
|
bool run(HINSTANCE hInst, HWND hwnd, int dialogId)
|
|
{
|
|
auto result = DialogBoxParam(hInst, MAKEINTRESOURCE(dialogId), hwnd, doalogProc, reinterpret_cast<LPARAM>(this));
|
|
return (result > 0);
|
|
}
|
|
|
|
static INT_PTR CALLBACK doalogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
if (message == WM_INITDIALOG)
|
|
SetWindowLongPtr(hDlg, DWLP_USER, lParam);
|
|
else
|
|
lParam = GetWindowLongPtr(hDlg, DWLP_USER);
|
|
|
|
auto* dialog = reinterpret_cast<Dialog*>(lParam);
|
|
return dialog->handle(hDlg, message, wParam);
|
|
}
|
|
|
|
protected:
|
|
INT_PTR handle(HWND hDlg, UINT message, WPARAM wParam)
|
|
{
|
|
switch (message) {
|
|
case WM_INITDIALOG: {
|
|
m_hDlg = hDlg;
|
|
setup();
|
|
update();
|
|
return TRUE;
|
|
}
|
|
case WM_COMMAND:
|
|
int wmId = LOWORD(wParam);
|
|
switch (wmId) {
|
|
case IDOK:
|
|
ok();
|
|
close(true);
|
|
return TRUE;
|
|
case IDCANCEL:
|
|
cancel();
|
|
close(false);
|
|
return TRUE;
|
|
default:
|
|
auto handled = command(wmId);
|
|
update();
|
|
return handled;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
virtual void setup() { }
|
|
virtual void update() { updateOkButton(validate()); }
|
|
virtual bool validate() { return true; }
|
|
virtual void updateOkButton(bool isValid) { setEnabled(IDOK, isValid); }
|
|
virtual bool command(int wmId) { return false; }
|
|
virtual void ok() { }
|
|
virtual void cancel() { }
|
|
|
|
void close(bool success) { EndDialog(m_hDlg, success); }
|
|
|
|
HWND hDlg() { return m_hDlg; }
|
|
|
|
HWND item(int itemId) { return GetDlgItem(m_hDlg, itemId); }
|
|
|
|
void setEnabled(int itemId, bool enabled)
|
|
{
|
|
EnableWindow(item(itemId), enabled);
|
|
}
|
|
|
|
void setText(int itemId, const std::wstring& str)
|
|
{
|
|
SetDlgItemText(m_hDlg, itemId, _bstr_t(str.c_str()));
|
|
}
|
|
|
|
std::wstring getText(int itemId)
|
|
{
|
|
auto length = getTextLength(itemId);
|
|
std::vector<TCHAR> buffer(length + 1, 0);
|
|
GetWindowText(item(itemId), buffer.data(), length + 1);
|
|
return std::wstring { buffer.data() };
|
|
}
|
|
|
|
int getTextLength(int itemId)
|
|
{
|
|
return GetWindowTextLength(item(itemId));
|
|
}
|
|
|
|
class RadioGroup {
|
|
public:
|
|
RadioGroup(Dialog& dialog, int first, int last)
|
|
: m_dialog(dialog)
|
|
, m_first(first)
|
|
, m_last(last)
|
|
{
|
|
}
|
|
|
|
void set(int item)
|
|
{
|
|
CheckRadioButton(m_dialog.hDlg(), m_first, m_last, item);
|
|
}
|
|
|
|
int get()
|
|
{
|
|
for (int id = m_first; id <= m_last; id++) {
|
|
if (IsDlgButtonChecked(m_dialog.hDlg(), id) == BST_CHECKED)
|
|
return id;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
private:
|
|
Dialog& m_dialog;
|
|
int m_first;
|
|
int m_last;
|
|
};
|
|
|
|
RadioGroup radioGroup(int first, int last)
|
|
{
|
|
return RadioGroup(*this, first, last);
|
|
}
|
|
|
|
HWND m_hDlg { };
|
|
};
|