老版本浮点配置不能恢复,直接恢复为默认值并提醒用户
This commit is contained in:
parent
32b61ba139
commit
5a5404e018
|
@ -1035,6 +1035,12 @@ namespace gb
|
||||||
jsn_->set_value(hex_t.c_str(), hex_v.c_str());
|
jsn_->set_value(hex_t.c_str(), hex_v.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void sane_config::remove_config(const char* title)
|
||||||
|
{
|
||||||
|
std::string hex_t(to_hex_letter(title, lstrlenA(title)));
|
||||||
|
if (jsn_)
|
||||||
|
jsn_->remove(hex_t.c_str());
|
||||||
|
}
|
||||||
void sane_config::end_setting(bool cancel)
|
void sane_config::end_setting(bool cancel)
|
||||||
{
|
{
|
||||||
if (in_setting_)
|
if (in_setting_)
|
||||||
|
|
|
@ -110,6 +110,7 @@ namespace gb
|
||||||
void begin_setting(bool restore = false);
|
void begin_setting(bool restore = false);
|
||||||
void config_changed(const char* title, const char* val, size_t bytes);
|
void config_changed(const char* title, const char* val, size_t bytes);
|
||||||
void config_changed(int sn, const char* val, size_t bytes);
|
void config_changed(int sn, const char* val, size_t bytes);
|
||||||
|
void remove_config(const char* title);
|
||||||
void end_setting(bool cancel);
|
void end_setting(bool cancel);
|
||||||
int id_from_title(const char* title);
|
int id_from_title(const char* title);
|
||||||
std::string to_text_stream(void);
|
std::string to_text_stream(void);
|
||||||
|
|
|
@ -237,8 +237,10 @@ void scanner::save_config(const wchar_t* file)
|
||||||
void scanner::apply_config(void)
|
void scanner::apply_config(void)
|
||||||
{
|
{
|
||||||
std::string t(""), v(""), ver(cfg_->get_version());
|
std::string t(""), v(""), ver(cfg_->get_version());
|
||||||
|
std::wstring notice(L"");
|
||||||
if (cfg_->first_config(t, v))
|
if (cfg_->first_config(t, v))
|
||||||
{
|
{
|
||||||
|
bool rewrite = false;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
int id = cfg_->id_from_title(t.c_str());
|
int id = cfg_->id_from_title(t.c_str());
|
||||||
|
@ -250,6 +252,7 @@ void scanner::apply_config(void)
|
||||||
if (desc)
|
if (desc)
|
||||||
{
|
{
|
||||||
char* buf = NULL;
|
char* buf = NULL;
|
||||||
|
bool omit = false;
|
||||||
if (desc->type == SANE_TYPE_STRING)
|
if (desc->type == SANE_TYPE_STRING)
|
||||||
{
|
{
|
||||||
buf = new char[desc->size + 4];
|
buf = new char[desc->size + 4];
|
||||||
|
@ -259,26 +262,40 @@ void scanner::apply_config(void)
|
||||||
}
|
}
|
||||||
else if (ver.empty() && desc->type == SANE_TYPE_FIXED) // 升级早期版本没将float转为SANE_Fixed的BUG
|
else if (ver.empty() && desc->type == SANE_TYPE_FIXED) // 升级早期版本没将float转为SANE_Fixed的BUG
|
||||||
{
|
{
|
||||||
fixed = SANE_FIX(*(float*)data);
|
cfg_->remove_config(t.c_str());
|
||||||
cfg_->config_changed(t.c_str(), (char*)&fixed, sizeof(fixed));
|
rewrite = true;
|
||||||
data = &fixed;
|
omit = true;
|
||||||
|
|
||||||
{
|
{
|
||||||
wchar_t msg[128] = { 0 };
|
wchar_t msg[128] = { 0 };
|
||||||
unsigned char* f = (unsigned char*)&v[0], * to = (unsigned char*)data;
|
std::wstring name(local_trans::a2u(t.c_str(), CP_UTF8));
|
||||||
swprintf_s(msg, _countof(msg) - 1, L"Upgrage '%s' from '%02X%02X%02X%02X' to '%02X%02X%02X%02X'\r\n"
|
unsigned char* f = (unsigned char*)&v[0];
|
||||||
, local_trans::a2u(t.c_str(), CP_UTF8).c_str(), f[0], f[1], f[2], f[3]
|
|
||||||
, to[0], to[1], to[2], to[3]);
|
notice += name + L"\r\n";
|
||||||
log_info(msg, 0);
|
name.insert(0, L"Discard old configuration '");
|
||||||
|
swprintf_s(msg, _countof(msg) - 1, L"' of value '%02X%02X%02X%02X'\r\n", f[0], f[1], f[2], f[3]);
|
||||||
|
log_info((name + msg).c_str(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!omit)
|
||||||
|
{
|
||||||
SANE_Int after = 0;
|
SANE_Int after = 0;
|
||||||
hg_sane_middleware::instance()->set_option(handle_, id, SANE_ACTION_SET_VALUE, data, &after);
|
hg_sane_middleware::instance()->set_option(handle_, id, SANE_ACTION_SET_VALUE, data, &after);
|
||||||
|
}
|
||||||
if (buf)
|
if (buf)
|
||||||
delete[] buf;
|
delete[] buf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (cfg_->next_config(t, v));
|
} while (cfg_->next_config(t, v));
|
||||||
|
if (rewrite)
|
||||||
|
{
|
||||||
|
cfg_->save_to(NULL);
|
||||||
|
if (notice.length())
|
||||||
|
{
|
||||||
|
notice.insert(0, L"\u4E0B\u5217\u914D\u7F6E\u6570\u636E\u9519\u8BEF\uFF0C\u5DF2\u7ECF\u6062\u590D\u5230\u9ED8\u8BA4\u503C\u3002\u5982\u679C\u9700\u8981\uFF0C\u8BF7\u91CD\u65B0\u8BBE\u7F6E\uFF1A\r\n\r\n");
|
||||||
|
MessageBoxW(NULL, notice.c_str(), L"\u52A0\u8F7D\u914D\u7F6E", MB_OK | MB_ICONINFORMATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void scanner::on_ui_event(int uev, void* sender)
|
void scanner::on_ui_event(int uev, void* sender)
|
||||||
|
@ -2358,6 +2375,11 @@ void init_log(void)
|
||||||
path = std::string(name) + "_twain.log";
|
path = std::string(name) + "_twain.log";
|
||||||
g_file_ = fopen(path.c_str(), "wb");
|
g_file_ = fopen(path.c_str(), "wb");
|
||||||
}
|
}
|
||||||
|
if (g_file_)
|
||||||
|
{
|
||||||
|
unsigned short bom = 0x0feff;
|
||||||
|
fwrite(&bom, sizeof(bom), 1, g_file_);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void close_log(void)
|
void close_log(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue