This commit is contained in:
gb 2023-05-06 10:43:18 +08:00
parent dde8bc9a2a
commit dc45ae8342
2 changed files with 37 additions and 9 deletions

View File

@ -169,15 +169,15 @@ known_file_util::IJsonW* CDlgOptJson::SANEOPT::to_json(void)
else if (type == L"string") else if (type == L"string")
{ {
int len = def_val.length(); int len = def_val.length();
jsn->set_value(L"cur", def_val.c_str()); jsn->set_value(L"cur", (const wchar_t*)def_val.c_str());
jsn->set_value(L"default", def_val.c_str()); jsn->set_value(L"default", (const wchar_t*)def_val.c_str());
if (range.size()) if (range.size())
{ {
known_file_util::IJsonW* rng = known_file_util::create_jsonW(); known_file_util::IJsonW* rng = known_file_util::create_jsonW();
rng->set_as_array(true); rng->set_as_array(true);
for (auto& v : range) for (auto& v : range)
{ {
*rng += v.c_str(); *rng += (const wchar_t*)v.c_str();
if (len < v.length()) if (len < v.length())
len = v.length(); len = v.length();
} }
@ -261,25 +261,30 @@ bool CDlgOptJson::SANEOPT::from_json(known_file_util::IJsonW* jsn)
bool v = false; bool v = false;
std::wstring sv(L""); std::wstring sv(L"");
jsn->get_value(L"default", v); if (!jsn->get_value(L"default", v))
jsn->get_value(L"cur", v);
sv = v ? L"true" : L"false"; sv = v ? L"true" : L"false";
def_val = std::string((char*)&sv[0], sv.length() * 2 + 2); def_val = std::string((char*)&sv[0], sv.length() * 2 + 2);
} }
else if(type == L"int") else if(type == L"int")
{ {
int v = false; int v = false;
jsn->get_value(L"default", v); if (!jsn->get_value(L"default", v))
jsn->get_value(L"cur", v);
def_val = std::string((char*)&v, sizeof(v)); def_val = std::string((char*)&v, sizeof(v));
} }
else if(type == L"float") else if(type == L"float")
{ {
double v = false; double v = false;
jsn->get_value(L"default", v); if (!jsn->get_value(L"default", v))
jsn->get_value(L"cur", v);
def_val = std::string((char*)&v, sizeof(v)); def_val = std::string((char*)&v, sizeof(v));
} }
else if(type == L"string") else if(type == L"string")
{ {
jsn->get_value(L"default", &strv); strv = NULL;
if (!jsn->get_value(L"default", &strv))
jsn->get_value(L"cur", &strv);
def_val = strv ? std::string((const char*)strv, lstrlenW(strv) * 2 + 2) : ""; def_val = strv ? std::string((const char*)strv, lstrlenW(strv) * 2 + 2) : "";
} }
@ -694,8 +699,31 @@ bool CDlgOptJson::load_from_json_text(const wchar_t* txt, std::wstring* err_msg)
int pos = 0; int pos = 0;
known_file_util::IJsonW* jsn = known_file_util::create_jsonW(txt, &pos), * child = NULL; known_file_util::IJsonW* jsn = known_file_util::create_jsonW(txt, &pos), * child = NULL;
if (!jsn) while (!jsn)
{ {
// try code-text ...
{
std::wstring code(txt);
size_t splash = code.find(L"\\\\");
while (splash != std::wstring::npos)
{
code.erase(splash++, 1);
splash = code.find(L"\\\\", splash);
}
splash = code.find(L"\\\"");
while (splash != std::wstring::npos)
{
code.erase(splash++, 1);
splash = code.find(L"\\\"", splash);
}
splash = 0;
jsn = known_file_util::create_jsonW(&code[0], (int*)&splash);
if (jsn)
break;
}
int ep = 10, len = 10; int ep = 10, len = 10;
if (lstrlenW(txt + pos) < 10) if (lstrlenW(txt + pos) < 10)
len = lstrlenW(txt + pos); len = lstrlenW(txt + pos);
@ -1448,5 +1476,5 @@ void CDlgOptJson::OnBnClickedButtonExport()
} }
int n = file_util::set_clipboard(cont.c_str(), cont.length() * 2, CF_UNICODETEXT); int n = file_util::set_clipboard(cont.c_str(), cont.length() * 2, CF_UNICODETEXT);
MessageBox(TEXT("JSON text has set to clipboard already")); MessageBox(TEXT("JSON text has set to clipboard already"), std::to_wstring(cont.length()).c_str());
} }