ppsspp/Windows/InputBox.cpp

163 lines
4.4 KiB
C++

#include "Common/Common.h"
#include "Common/CommonTypes.h"
#include "Common/CommonWindows.h"
#include "Windows/InputBox.h"
#include "Windows/resource.h"
#include "Windows/W32Util/Misc.h"
#include "Common/Data/Encoding/Utf8.h"
struct DialogBoxParams {
std::wstring textBoxContents;
std::wstring passwordContents;
std::wstring out;
std::wstring windowTitle;
bool defaultSelected;
bool passwordMasking;
std::string userName;
std::string passWord;
};
static DialogBoxParams g_params;
static INT_PTR CALLBACK InputBoxFunc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
{
HWND hwndTextBox = GetDlgItem(hDlg, IDC_INPUTBOX);
SetWindowText(hwndTextBox, g_params.textBoxContents.c_str());
SetWindowText(hDlg, g_params.windowTitle.c_str());
if (!g_params.defaultSelected) {
PostMessage(hwndTextBox, EM_SETSEL, -1, -1);
}
if (g_params.passwordMasking) {
LONG_PTR style = GetWindowLongPtr(hwndTextBox, GWL_STYLE);
SetWindowLongPtr(hwndTextBox, GWL_STYLE, style | ES_PASSWORD);
SendMessage(hwndTextBox, EM_SETPASSWORDCHAR, (WPARAM)'*', 0);
}
W32Util::CenterWindow(hDlg);
return TRUE;
}
case WM_COMMAND:
switch (wParam) {
case IDOK:
{
wchar_t temp[512];
GetWindowText(GetDlgItem(hDlg, IDC_INPUTBOX), temp, ARRAY_SIZE(temp));
g_params.out = temp;
EndDialog(hDlg, IDOK);
return TRUE;
}
case IDCANCEL:
EndDialog(hDlg, IDCANCEL);
return TRUE;
default:
return FALSE;
}
default:
return FALSE;
}
}
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, const wchar_t *title, const std::string &defaultValue, std::string &outvalue, InputBoxFlags flags) {
const wchar_t *defaultTitle = L"Input value";
g_params.defaultSelected = flags & InputBoxFlags::Selected;
g_params.passwordMasking = flags & InputBoxFlags::PasswordMasking;
if (defaultValue.size() < 255) {
g_params.textBoxContents = ConvertUTF8ToWString(defaultValue);
} else {
g_params.textBoxContents.clear();
}
if (title && wcslen(title) <= 0) {
g_params.windowTitle = defaultTitle;
} else if (title && wcslen(title) < 255) {
g_params.windowTitle = title;
} else {
g_params.windowTitle = defaultTitle;
}
if (IDOK == DialogBox(hInst, (LPCWSTR)IDD_INPUTBOX, hParent, InputBoxFunc)) {
outvalue = ConvertWStringToUTF8(g_params.out);
return true;
} else {
return false;
}
}
bool InputBox_GetHex(HINSTANCE hInst, HWND hParent, const wchar_t* title, u32 defaultvalue, u32 &outvalue) {
const wchar_t *defaultTitle = L"Input value";
wchar_t temp[256];
wsprintf(temp, L"%08x", defaultvalue);
g_params.textBoxContents = temp;
if (title && wcslen(title) <= 0)
g_params.windowTitle = defaultTitle;
else if (title && wcslen(title) < 255)
g_params.windowTitle = title;
else
g_params.windowTitle = defaultTitle;
INT_PTR value = DialogBox(hInst, (LPCWSTR)IDD_INPUTBOX, hParent, InputBoxFunc);
if (value == IDOK) {
if (swscanf(g_params.out.c_str(), L"0x%08x", &outvalue) == 1)
return true;
if (swscanf(g_params.out.c_str(), L"%08x", &outvalue) == 1)
return true;
return false;
} else {
outvalue = 0;
return false;
}
}
static INT_PTR CALLBACK UserPasswordBoxFunc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
SetWindowText(GetDlgItem(hDlg, IDC_INPUTBOX), L"");
SetWindowText(GetDlgItem(hDlg, IDC_PASSWORDBOX), L"");
SetWindowText(hDlg, g_params.windowTitle.c_str());
PostMessage(GetDlgItem(hDlg, IDC_INPUTBOX), EM_SETSEL, -1, -1);
PostMessage(GetDlgItem(hDlg, IDC_PASSWORDBOX), EM_SETSEL, -1, -1);
W32Util::CenterWindow(hDlg);
return TRUE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
{
wchar_t temp[256];
GetWindowText(GetDlgItem(hDlg, IDC_INPUTBOX), temp, sizeof(temp));
g_params.userName = ConvertWStringToUTF8(temp);
GetWindowText(GetDlgItem(hDlg, IDC_PASSWORDBOX), temp, sizeof(temp));
g_params.passWord = ConvertWStringToUTF8(temp);
EndDialog(hDlg, IDOK);
return TRUE;
}
case IDCANCEL:
EndDialog(hDlg, IDCANCEL);
return TRUE;
default:
return FALSE;
}
default:
return FALSE;
}
}
bool UserPasswordBox_GetStrings(HINSTANCE hInst, HWND hParent, const wchar_t *title, std::string *username, std::string *password) {
g_params.windowTitle = title;
INT_PTR value = DialogBox(hInst, (LPCWSTR)IDD_USERPASSWORDBOX, hParent, UserPasswordBoxFunc);
if (value == IDOK) {
*username = g_params.userName;
*password = g_params.passWord;
return true;
} else {
return false;
}
}