Merge branch 'master' of http://192.168.10.5:8099/sane/code_twain
This commit is contained in:
commit
b9abfad34b
|
@ -14,20 +14,20 @@ int dlg_area::area_min_pixel = 50;
|
||||||
dlg_area::dlg_area(HWND parent) : dlg_base(parent, IDD_AREA)
|
dlg_area::dlg_area(HWND parent) : dlg_base(parent, IDD_AREA)
|
||||||
, unit_(PAPER_UNIT_MM), paper_w_(210), paper_h_(297), dpi_(200)
|
, unit_(PAPER_UNIT_MM), paper_w_(210), paper_h_(297), dpi_(200)
|
||||||
, x_(0), y_(0), w_(paper_w_), h_(paper_h_)
|
, x_(0), y_(0), w_(paper_w_), h_(paper_h_)
|
||||||
, exit_code_(0), paper_(L"A4")
|
, paper_(L"A4")
|
||||||
, paper_w_0_(paper_w_), paper_h_0_(paper_h_), cursor_(NULL), drag_(DRAG_POS_NONE)
|
, paper_w_0_(paper_w_), paper_h_0_(paper_h_), cursor_(NULL), drag_(DRAG_POS_NONE)
|
||||||
, in_set_func_(false)
|
, in_set_func_(false)
|
||||||
{
|
{
|
||||||
std::wstring title(dlg_base::language_from_hz936(L"\u81EA\u5B9A\u4E49\u626B\u63CF\u533A\u57DF"));
|
std::wstring title(local_trans::lang_trans_between_hz936(CONST_STRING_CUSTOM_AREA));
|
||||||
|
|
||||||
create();
|
create();
|
||||||
|
|
||||||
SetWindowTextW(hwnd(), title.c_str());
|
SetWindowTextW(hwnd(), title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u6BEB\u7C73") + L" (mm)";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_UNIT_MM) + L" (mm)";
|
||||||
SendMessageW(get_item(IDC_UNIT), CB_ADDSTRING, 0, (LPARAM)&title[0]);
|
SendMessageW(get_item(IDC_UNIT), CB_ADDSTRING, 0, (LPARAM)&title[0]);
|
||||||
title = dlg_base::language_from_hz936(L"\u82F1\u5BF8") + L" (inch)";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_UNIT_INCH) + L" (inch)";
|
||||||
SendMessageW(get_item(IDC_UNIT), CB_ADDSTRING, 0, (LPARAM)&title[0]);
|
SendMessageW(get_item(IDC_UNIT), CB_ADDSTRING, 0, (LPARAM)&title[0]);
|
||||||
title = dlg_base::language_from_hz936(L"\u50CF\u7D20") + L" (px)";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_UNIT_PIXEL) + L" (px)";
|
||||||
SendMessageW(get_item(IDC_UNIT), CB_ADDSTRING, 0, (LPARAM)&title[0]);
|
SendMessageW(get_item(IDC_UNIT), CB_ADDSTRING, 0, (LPARAM)&title[0]);
|
||||||
SendMessage(get_item(IDC_UNIT), CB_SETCURSEL, 0, 0);
|
SendMessage(get_item(IDC_UNIT), CB_SETCURSEL, 0, 0);
|
||||||
|
|
||||||
|
@ -37,28 +37,28 @@ dlg_area::dlg_area(HWND parent) : dlg_base(parent, IDD_AREA)
|
||||||
int width_diff = 0, w = 0;
|
int width_diff = 0, w = 0;
|
||||||
RECT r = { 0 }, rp = { 0 };
|
RECT r = { 0 }, rp = { 0 };
|
||||||
|
|
||||||
title = dlg_base::language_from_hz936(L"\u7EB8\u5F20\u5C3A\u5BF8") + L":";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_OPT_PAPER) + L":";
|
||||||
set_item_text(IDC_STATIC_PAPER, title.c_str());
|
set_item_text(IDC_STATIC_PAPER, title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u5355\u4F4D") + L":";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_UNIT) + L":";
|
||||||
set_item_text(IDC_STATIC_UNIT, title.c_str());
|
set_item_text(IDC_STATIC_UNIT, title.c_str());
|
||||||
title = L"DPI (" + dlg_base::language_from_hz936(L"\u50CF\u7D20") + L"/" + dlg_base::language_from_hz936(L"\u82F1\u5BF8") + L"):";
|
title = L"DPI (" + local_trans::lang_trans_between_hz936(CONST_STRING_UNIT_PIXEL) + L"/" + local_trans::lang_trans_between_hz936(CONST_STRING_UNIT_INCH) + L"):";
|
||||||
set_item_text(IDC_STATIC_DPI, title.c_str());
|
set_item_text(IDC_STATIC_DPI, title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u533A\u57DF\u8BBE\u7F6E") + L":";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_AREA_SET) + L":";
|
||||||
set_item_text(IDC_STATIC_AREA, title.c_str());
|
set_item_text(IDC_STATIC_AREA, title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u5DE6") + L":";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_LEFT) + L":";
|
||||||
set_item_text(IDC_STATIC_LEFT, title.c_str());
|
set_item_text(IDC_STATIC_LEFT, title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u4E0A") + L":";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_TOP) + L":";
|
||||||
set_item_text(IDC_STATIC_TOP, title.c_str());
|
set_item_text(IDC_STATIC_TOP, title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u5BBD") + L":";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_WIDTH) + L":";
|
||||||
set_item_text(IDC_STATIC_W, title.c_str());
|
set_item_text(IDC_STATIC_W, title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u9AD8") + L":";
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_HEIGHT) + L":";
|
||||||
set_item_text(IDC_STATIC_H, title.c_str());
|
set_item_text(IDC_STATIC_H, title.c_str());
|
||||||
|
|
||||||
title = dlg_base::language_from_hz936(L"\u6062\u590D\u533A\u57DF");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_RESTORE_AREA);
|
||||||
set_item_text(IDC_BUTTON_RESET, title.c_str());
|
set_item_text(IDC_BUTTON_RESET, title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u53D6\u6D88");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_CANCEL);
|
||||||
set_item_text(IDCANCEL, title.c_str());
|
set_item_text(IDCANCEL, title.c_str());
|
||||||
title = dlg_base::language_from_hz936(L"\u786E\u5B9A");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_OK);
|
||||||
set_item_text(IDOK, title.c_str());
|
set_item_text(IDOK, title.c_str());
|
||||||
|
|
||||||
layout();
|
layout();
|
||||||
|
@ -142,11 +142,11 @@ void dlg_area::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
}
|
}
|
||||||
else if (id == IDCANCEL)
|
else if (id == IDCANCEL)
|
||||||
{
|
{
|
||||||
exit_code_ = id;
|
quit_modal(id);
|
||||||
}
|
}
|
||||||
else if (id == IDOK)
|
else if (id == IDOK)
|
||||||
{
|
{
|
||||||
exit_code_ = id;
|
quit_modal(id);
|
||||||
}
|
}
|
||||||
else if (id == IDC_BUTTON_RESET)
|
else if (id == IDC_BUTTON_RESET)
|
||||||
{
|
{
|
||||||
|
@ -344,7 +344,7 @@ std::wstring dlg_area::format_number(float v)
|
||||||
}
|
}
|
||||||
void dlg_area::refresh_paper_info(void)
|
void dlg_area::refresh_paper_info(void)
|
||||||
{
|
{
|
||||||
SetWindowTextW(get_item(IDC_EDIT_PAPER), (paper_ + L"(" + format_number(paper_w_) + L"\u00d7" + format_number(paper_h_) + L")").c_str());
|
SetWindowTextW(get_item(IDC_EDIT_PAPER), (paper_ + L"(" + format_number(paper_w_) + local_trans::lang_trans_between_hz936(CONST_STRING_MULTIPLE) + format_number(paper_h_) + L")").c_str());
|
||||||
SetDlgItemInt(hwnd(), IDC_EDIT_DPI, UINT(dpi_), FALSE);
|
SetDlgItemInt(hwnd(), IDC_EDIT_DPI, UINT(dpi_), FALSE);
|
||||||
|
|
||||||
in_set_func_ = true;
|
in_set_func_ = true;
|
||||||
|
@ -796,43 +796,6 @@ void dlg_area::set_area(float x, float y, float w, float h)
|
||||||
|
|
||||||
refresh_paper_info();
|
refresh_paper_info();
|
||||||
}
|
}
|
||||||
int dlg_area::do_modal(HWND parent)
|
|
||||||
{
|
|
||||||
BOOL enable_parent = FALSE,
|
|
||||||
got = TRUE;
|
|
||||||
MSG msg = { 0 };
|
|
||||||
|
|
||||||
if (IsWindow(parent) && parent != GetDesktopWindow())
|
|
||||||
{
|
|
||||||
EnableWindow(parent, FALSE);
|
|
||||||
enable_parent = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
ShowWindow(hwnd(), SW_SHOW);
|
|
||||||
while ((got = GetMessage(&msg, NULL, 0, 0)))
|
|
||||||
{
|
|
||||||
if ((DWORD)got == -1)
|
|
||||||
break;
|
|
||||||
|
|
||||||
//if (enable_parent && msg.hwnd == parent &&
|
|
||||||
// msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST &&
|
|
||||||
// msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST)
|
|
||||||
// continue;
|
|
||||||
|
|
||||||
TranslateMessage(&msg);
|
|
||||||
DispatchMessage(&msg);
|
|
||||||
if (exit_code_ == IDOK || exit_code_ == IDCANCEL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ShowWindow(hwnd(), SW_HIDE);
|
|
||||||
|
|
||||||
if (enable_parent)
|
|
||||||
{
|
|
||||||
EnableWindow(parent, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return exit_code_;
|
|
||||||
}
|
|
||||||
float dlg_area::x_in_mm(void)
|
float dlg_area::x_in_mm(void)
|
||||||
{
|
{
|
||||||
return as_mm(x_);
|
return as_mm(x_);
|
||||||
|
|
|
@ -43,7 +43,6 @@ class dlg_area: public dlg_base
|
||||||
float y_;
|
float y_;
|
||||||
float w_;
|
float w_;
|
||||||
float h_;
|
float h_;
|
||||||
int exit_code_;
|
|
||||||
|
|
||||||
RECT whole_;
|
RECT whole_;
|
||||||
RECT user_sel_;
|
RECT user_sel_;
|
||||||
|
@ -92,7 +91,6 @@ public:
|
||||||
public:
|
public:
|
||||||
void set_paper(const wchar_t* name, float width_mm, float height_mm, float dpi);
|
void set_paper(const wchar_t* name, float width_mm, float height_mm, float dpi);
|
||||||
void set_area(float x, float y, float w, float h);
|
void set_area(float x, float y, float w, float h);
|
||||||
int do_modal(HWND parent); // return IDOK or IDCANCEL
|
|
||||||
float x_in_mm(void);
|
float x_in_mm(void);
|
||||||
float y_in_mm(void);
|
float y_in_mm(void);
|
||||||
float w_in_mm(void);
|
float w_in_mm(void);
|
||||||
|
|
|
@ -0,0 +1,208 @@
|
||||||
|
// DlgIndicator.cpp: 实现文件
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "DlgCfgMgr.h"
|
||||||
|
#include "resource.h"
|
||||||
|
#include "scanned_img.h" // for local_trans
|
||||||
|
#include "mem_dc.h"
|
||||||
|
#include "gb_json.h"
|
||||||
|
|
||||||
|
// CDlgIndicator 对话框
|
||||||
|
|
||||||
|
dlg_cfg_mgr::dlg_cfg_mgr(gb::scanner_cfg* cfg, HWND parent) : cfg_(cfg), dlg_base(parent, IDD_CFG_MGR)
|
||||||
|
{
|
||||||
|
create();
|
||||||
|
|
||||||
|
std::wstring title(local_trans::lang_trans_between_hz936(CONST_STRING_CFG_MANAGER));
|
||||||
|
int dif = 0;
|
||||||
|
|
||||||
|
SetWindowTextW(hwnd(), title.c_str());
|
||||||
|
|
||||||
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_CFG_SCHEME);
|
||||||
|
set_item_text(IDC_STATIC_PAPER, title.c_str());
|
||||||
|
set_item_fit_to_text(IDC_STATIC_PAPER);
|
||||||
|
|
||||||
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_DEL_SELECTED);
|
||||||
|
set_item_text(IDC_BUTTON_DEL_SEL, title.c_str());
|
||||||
|
dif = set_item_fit_to_text(IDC_BUTTON_DEL_SEL);
|
||||||
|
if (dif)
|
||||||
|
offset_item(IDC_BUTTON_DEL_SEL, -dif, 0);
|
||||||
|
|
||||||
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_DEL_ALL);
|
||||||
|
set_item_text(IDC_BUTTON_DEL_ALL, title.c_str());
|
||||||
|
set_item_fit_to_text(IDC_BUTTON_DEL_ALL);
|
||||||
|
|
||||||
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_CFG_CONTENT);
|
||||||
|
set_item_text(IDC_STATIC_SKETCH, title.c_str());
|
||||||
|
|
||||||
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_OK);
|
||||||
|
set_item_text(IDOK, title.c_str());
|
||||||
|
}
|
||||||
|
dlg_cfg_mgr::~dlg_cfg_mgr()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL dlg_cfg_mgr::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
||||||
|
{
|
||||||
|
wchar_t text[40] = { 0 };
|
||||||
|
BOOL ret = TRUE;
|
||||||
|
|
||||||
|
switch (msg)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
on_init_dlg();
|
||||||
|
UpdateWindow(hwnd());
|
||||||
|
break;
|
||||||
|
case WM_COMMAND:
|
||||||
|
handle_command(HIWORD(wp), LOWORD(wp), (HWND)lp);
|
||||||
|
break;
|
||||||
|
case WM_NOTIFY:
|
||||||
|
handle_notify(wp, (LPNMHDR)lp);
|
||||||
|
break;
|
||||||
|
case WM_PAINT:
|
||||||
|
{
|
||||||
|
PAINTSTRUCT ps = { 0 };
|
||||||
|
HDC hdc = BeginPaint(hwnd(), &ps);
|
||||||
|
{
|
||||||
|
compatible_dc dc(hdc);
|
||||||
|
on_paint(dc.get_dc());
|
||||||
|
}
|
||||||
|
EndPaint(hwnd(), &ps);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = FALSE;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
void dlg_cfg_mgr::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
|
{
|
||||||
|
wchar_t cls[128] = { 0 };
|
||||||
|
|
||||||
|
GetClassNameW((HWND)ctrl, cls, _countof(cls) - 1);
|
||||||
|
if (IS_BUTTON(cls))
|
||||||
|
{
|
||||||
|
if (code == BN_CLICKED)
|
||||||
|
{
|
||||||
|
if (id == IDOK || id == IDCANCEL)
|
||||||
|
quit_modal(id);
|
||||||
|
else if (id == IDC_BUTTON_DEL_SEL)
|
||||||
|
on_del_selected();
|
||||||
|
else if (id == IDC_BUTTON_DEL_ALL)
|
||||||
|
on_del_all();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (IS_EDIT(cls))
|
||||||
|
{
|
||||||
|
//if (code == EN_SETFOCUS)
|
||||||
|
// label_edit_ = (HWND)ctrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void dlg_cfg_mgr::handle_notify(UINT id, LPNMHDR pnhdr)
|
||||||
|
{
|
||||||
|
if (id == IDC_LIST1)
|
||||||
|
{
|
||||||
|
if (pnhdr->code == LVN_BEGINLABELEDITW)
|
||||||
|
{
|
||||||
|
LPNMLVDISPINFOW pdisp = (LPNMLVDISPINFOW)pnhdr;
|
||||||
|
|
||||||
|
label_ = pdisp->item.pszText;
|
||||||
|
}
|
||||||
|
else if (pnhdr->code == LVN_ENDLABELEDITW)
|
||||||
|
{
|
||||||
|
LPNMLVDISPINFOW pdisp = (LPNMLVDISPINFOW)pnhdr;
|
||||||
|
|
||||||
|
if (pdisp->item.pszText && label_ != pdisp->item.pszText)
|
||||||
|
{
|
||||||
|
ListView_SetItemText(get_item(IDC_LIST1), pdisp->item.iItem, pdisp->item.iSubItem, pdisp->item.pszText);
|
||||||
|
|
||||||
|
if (cfg_)
|
||||||
|
{
|
||||||
|
if (!cfg_->rename_scheme(local_trans::u2a(label_.c_str(), CP_UTF8).c_str(), local_trans::u2a(pdisp->item.pszText, CP_UTF8).c_str()))
|
||||||
|
{
|
||||||
|
std::wstring input(pdisp->item.pszText);
|
||||||
|
|
||||||
|
input += L" " + local_trans::lang_trans_between_hz936(CONST_STRING_ALREADY_EXISTS);
|
||||||
|
::MessageBoxW(hwnd(), input.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_RE_INPUT).c_str(), MB_OK | MB_ICONINFORMATION);
|
||||||
|
dlg_base::list_set_item_text(get_item(IDC_LIST1), pdisp->item.iItem, 0, label_.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pnhdr->code == LVN_ITEMCHANGED)
|
||||||
|
{
|
||||||
|
LPNMLISTVIEW pv = (LPNMLISTVIEW)pnhdr;
|
||||||
|
if ((pv->uNewState & LVIS_SELECTED) && (pv->uOldState & LVIS_SELECTED) == 0)
|
||||||
|
on_sel_changed(pv->iItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void dlg_cfg_mgr::layout(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void dlg_cfg_mgr::on_init_dlg(void)
|
||||||
|
{
|
||||||
|
HWND lstwnd = get_item(IDC_LIST1);
|
||||||
|
std::vector<std::string> schemes;
|
||||||
|
|
||||||
|
cfg_->get_all_schemes(schemes);
|
||||||
|
dlg_base::list_insert_column(lstwnd, local_trans::lang_trans_between_hz936(CONST_STRING_CFG_NAME).c_str(), 270);
|
||||||
|
for (size_t i = 1; i < schemes.size(); ++i) // 0 is default scheme
|
||||||
|
{
|
||||||
|
dlg_base::list_insert_item(lstwnd, local_trans::a2u(schemes[i].c_str(), CP_UTF8).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void dlg_cfg_mgr::on_paint(HDC hdc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void dlg_cfg_mgr::on_sel_changed(int sel)
|
||||||
|
{
|
||||||
|
std::wstring name(dlg_base::list_get_text(get_item(IDC_LIST1), sel));
|
||||||
|
gb::sane_config_schm* schm = cfg_->get_scheme(local_trans::u2a(name.c_str(), CP_UTF8).c_str());
|
||||||
|
|
||||||
|
name = L"";
|
||||||
|
if (schm)
|
||||||
|
{
|
||||||
|
std::string key(""), val("");
|
||||||
|
int cnt = 1;
|
||||||
|
|
||||||
|
if (schm->first_config(key, val))
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
std::string v(gb::sane_config_schm::sane_option_value_2_string(&val[0], val.length(), (SANE_Value_Type)cfg_->option_value_type(key.c_str())));
|
||||||
|
|
||||||
|
name += std::to_wstring(cnt++) + L" - " + local_trans::a2u(cfg_->option_title(key.c_str()).c_str(), CP_UTF8) + L"\r\n ";
|
||||||
|
if (cfg_->option_value_type(key.c_str()) == SANE_TYPE_STRING)
|
||||||
|
v = local_trans::u2a(local_trans::lang_trans_between_hz936(local_trans::a2u(v.c_str(), CP_UTF8).c_str()).c_str(), CP_UTF8);
|
||||||
|
name += local_trans::a2u(v.c_str(), CP_UTF8) + L"\r\n\r\n";
|
||||||
|
} while (schm->next_config(key, val));
|
||||||
|
}
|
||||||
|
schm->release();
|
||||||
|
}
|
||||||
|
dlg_base::set_item_text(IDC_EDIT1, name.c_str());
|
||||||
|
}
|
||||||
|
void dlg_cfg_mgr::on_del_selected(void)
|
||||||
|
{
|
||||||
|
std::vector<int> sels;
|
||||||
|
HWND lwnd = get_item(IDC_LIST1);
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
dlg_base::list_get_selected_items(lwnd, sels);
|
||||||
|
for(int i = sels.size() - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
std::string name(local_trans::u2a(dlg_base::list_get_text(lwnd, sels[i]).c_str(), CP_UTF8));
|
||||||
|
if (cfg_->remove_scheme(name.c_str()))
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
ListView_DeleteItem(lwnd, sels[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void dlg_cfg_mgr::on_del_all(void)
|
||||||
|
{
|
||||||
|
cfg_->remove_all_schemes();
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "DlgPage.h"
|
||||||
|
|
||||||
|
// CDlgIndicator 对话框
|
||||||
|
namespace gb
|
||||||
|
{
|
||||||
|
class scanner_cfg;
|
||||||
|
}
|
||||||
|
|
||||||
|
class dlg_cfg_mgr: public dlg_base
|
||||||
|
{
|
||||||
|
gb::scanner_cfg* cfg_;
|
||||||
|
std::wstring label_;
|
||||||
|
|
||||||
|
BOOL handle_message(UINT msg, WPARAM wp, LPARAM lp) override;
|
||||||
|
void handle_command(WORD code, WORD id, HANDLE ctrl);
|
||||||
|
void handle_notify(UINT id, LPNMHDR pnhdr);
|
||||||
|
void layout(void);
|
||||||
|
|
||||||
|
void on_init_dlg(void);
|
||||||
|
void on_paint(HDC hdc);
|
||||||
|
void on_sel_changed(int sel);
|
||||||
|
void on_del_selected(void);
|
||||||
|
void on_del_all(void);
|
||||||
|
|
||||||
|
public:
|
||||||
|
dlg_cfg_mgr(gb::scanner_cfg* cfg, HWND parent);
|
||||||
|
~dlg_cfg_mgr();
|
||||||
|
|
||||||
|
public:
|
||||||
|
};
|
|
@ -5,6 +5,7 @@
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "mem_dc.h"
|
#include "mem_dc.h"
|
||||||
|
|
||||||
|
#include "scanned_img.h"
|
||||||
|
|
||||||
#define MAX_KEY_POINTS 4 // not include (0, 0) and (255, 255)
|
#define MAX_KEY_POINTS 4 // not include (0, 0) and (255, 255)
|
||||||
|
|
||||||
|
@ -94,35 +95,35 @@ namespace calc
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// dlg_gamma
|
// dlg_gamma
|
||||||
dlg_gamma::dlg_gamma(HWND parent, bool color) : dlg_base(parent, IDD_GAMMA), exit_code_(0), is_color_(color), bkgnd_(NULL)
|
dlg_gamma::dlg_gamma(HWND parent, bool color) : dlg_base(parent, IDD_GAMMA), is_color_(color), bkgnd_(NULL)
|
||||||
, show_all_(false)
|
, show_all_(false)
|
||||||
{
|
{
|
||||||
std::wstring title(dlg_base::language_from_hz936(L"\u81EA\u5B9A\u4E49\u8272\u8C03\u66F2\u7EBF"));
|
std::wstring title(local_trans::lang_trans_between_hz936(CONST_STRING_CUSTOM_TONE));
|
||||||
|
|
||||||
create();
|
create();
|
||||||
SetWindowTextW(hwnd(), title.c_str());
|
SetWindowTextW(hwnd(), title.c_str());
|
||||||
|
|
||||||
if (!dlg_base::is_language_pack_default_code_page())
|
if (!dlg_base::is_language_pack_default_code_page())
|
||||||
{
|
{
|
||||||
title = dlg_base::language_from_hz936(L"\u8272\u8C03\u65B9\u6848");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_TONE_SCHEME);
|
||||||
set_item_text(IDC_STATIC_SCHEME, title.c_str());
|
set_item_text(IDC_STATIC_SCHEME, title.c_str());
|
||||||
|
|
||||||
title = dlg_base::language_from_hz936(L"\u989C\u8272\u901A\u9053");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_COLOR_CHANNEL);
|
||||||
set_item_text(IDC_STATIC_COLOR, title.c_str());
|
set_item_text(IDC_STATIC_COLOR, title.c_str());
|
||||||
|
|
||||||
title = dlg_base::language_from_hz936(L"\u521D\u59CB\u5316");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_INITIALIZE);
|
||||||
set_item_text(IDC_BUTTON_RESET, title.c_str());
|
set_item_text(IDC_BUTTON_RESET, title.c_str());
|
||||||
|
|
||||||
title = dlg_base::language_from_hz936(L"\u8F93\u5165");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_INPUT);
|
||||||
set_item_text(IDC_STATIC_INPUT, title.c_str());
|
set_item_text(IDC_STATIC_INPUT, title.c_str());
|
||||||
|
|
||||||
title = dlg_base::language_from_hz936(L"\u8F93\u51FA");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_OUTPUT);
|
||||||
set_item_text(IDC_STATIC_OUTPUT, title.c_str());
|
set_item_text(IDC_STATIC_OUTPUT, title.c_str());
|
||||||
|
|
||||||
title = dlg_base::language_from_hz936(L"\u53D6\u6D88");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_CANCEL);
|
||||||
set_item_text(IDCANCEL, title.c_str());
|
set_item_text(IDCANCEL, title.c_str());
|
||||||
|
|
||||||
title = dlg_base::language_from_hz936(L"\u786E\u5B9A");
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_OK);
|
||||||
set_item_text(IDOK, title.c_str());
|
set_item_text(IDOK, title.c_str());
|
||||||
|
|
||||||
layout();
|
layout();
|
||||||
|
@ -184,7 +185,7 @@ void dlg_gamma::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
exit_code_ = id;
|
quit_modal(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (code == EN_CHANGE)
|
else if (code == EN_CHANGE)
|
||||||
|
@ -490,15 +491,15 @@ void dlg_gamma::on_init_dlg(void)
|
||||||
init_curve(&green_, RGB(0, 255, 0));
|
init_curve(&green_, RGB(0, 255, 0));
|
||||||
init_curve(&blue_, RGB(0, 0, 255));
|
init_curve(&blue_, RGB(0, 0, 255));
|
||||||
|
|
||||||
std::wstring lang(dlg_base::language_from_hz936(L"\u81ea\u5b9a\u4e49"));
|
std::wstring lang(local_trans::lang_trans_between_hz936(CONST_STRING_CUSTOM));
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
lang = dlg_base::language_from_hz936(L"\u8d1f\u7247") + L" (RGB)";
|
lang = local_trans::lang_trans_between_hz936(CONST_STRING_NEG_PHOTO) + L" (RGB)";
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
lang = dlg_base::language_from_hz936(L"\u5f69\u8272\u8d1f\u7247") + L" (RGB)";
|
lang = local_trans::lang_trans_between_hz936(CONST_STRING_COLOR_NEG_PHOTO) + L" (RGB)";
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
lang = dlg_base::language_from_hz936(L"\u8f83\u6697") + L" (RGB)";
|
lang = local_trans::lang_trans_between_hz936(CONST_STRING_DARKER) + L" (RGB)";
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
lang = dlg_base::language_from_hz936(L"\u8f83\u4eae") + L" (RGB)";
|
lang = local_trans::lang_trans_between_hz936(CONST_STRING_BRIGHTER) + L" (RGB)";
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
SendMessage(combo, CB_SETCURSEL, 0, 0);
|
SendMessage(combo, CB_SETCURSEL, 0, 0);
|
||||||
|
|
||||||
|
@ -506,16 +507,16 @@ void dlg_gamma::on_init_dlg(void)
|
||||||
if (is_color_)
|
if (is_color_)
|
||||||
{
|
{
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)L"RGB");
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)L"RGB");
|
||||||
lang = dlg_base::language_from_hz936(L"\u7ea2");
|
lang = local_trans::lang_trans_between_hz936(CONST_STRING_RED);
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
lang = dlg_base::language_from_hz936(L"\u7eff");
|
lang = local_trans::lang_trans_between_hz936(CONST_STRING_GREEN);
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
lang = dlg_base::language_from_hz936(L"\u84dd");
|
lang = local_trans::lang_trans_between_hz936(CONST_STRING_BLUE);
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lang = dlg_base::language_from_hz936(L"\u7070");
|
lang = local_trans::lang_trans_between_hz936(CONST_STRING_GRAY);
|
||||||
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)&lang[0]);
|
||||||
}
|
}
|
||||||
SendMessage(combo, CB_SETCURSEL, 0, 0);
|
SendMessage(combo, CB_SETCURSEL, 0, 0);
|
||||||
|
@ -702,43 +703,6 @@ void dlg_gamma::on_combo_sel_changed(int id, int sel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int dlg_gamma::do_modal(HWND parent)
|
|
||||||
{
|
|
||||||
BOOL enable_parent = FALSE,
|
|
||||||
got = TRUE;
|
|
||||||
MSG msg = { 0 };
|
|
||||||
|
|
||||||
if (IsWindow(parent) && parent != GetDesktopWindow())
|
|
||||||
{
|
|
||||||
EnableWindow(parent, FALSE);
|
|
||||||
enable_parent = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
ShowWindow(hwnd(), SW_SHOW);
|
|
||||||
while ((got = GetMessage(&msg, NULL, 0, 0)))
|
|
||||||
{
|
|
||||||
if ((DWORD)got == -1)
|
|
||||||
break;
|
|
||||||
|
|
||||||
//if (enable_parent && msg.hwnd == parent &&
|
|
||||||
// msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST &&
|
|
||||||
// msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST)
|
|
||||||
// continue;
|
|
||||||
|
|
||||||
TranslateMessage(&msg);
|
|
||||||
DispatchMessage(&msg);
|
|
||||||
if (exit_code_ == IDOK || exit_code_ == IDCANCEL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ShowWindow(hwnd(), SW_HIDE);
|
|
||||||
|
|
||||||
if (enable_parent)
|
|
||||||
{
|
|
||||||
EnableWindow(parent, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return exit_code_;
|
|
||||||
}
|
|
||||||
void dlg_gamma::get_gamma(SANE_Gamma* gamma)
|
void dlg_gamma::get_gamma(SANE_Gamma* gamma)
|
||||||
{
|
{
|
||||||
gamma->apply_to_back = SANE_FALSE;
|
gamma->apply_to_back = SANE_FALSE;
|
||||||
|
@ -812,7 +776,7 @@ void dlg_gamma::set_gamma(const SANE_Gamma* gamma, bool gray)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
text = dlg_base::language_from_hz936(L"\u7070");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_GRAY);
|
||||||
SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)&text[0]);
|
SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)&text[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -847,11 +811,11 @@ void dlg_gamma::set_gamma(const SANE_Gamma* gamma, bool gray)
|
||||||
cur_->coefs = calc::coefs_from_points(cur_->points);
|
cur_->coefs = calc::coefs_from_points(cur_->points);
|
||||||
|
|
||||||
// SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)L"RGB");
|
// SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)L"RGB");
|
||||||
text = dlg_base::language_from_hz936(L"\u7ea2");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_RED);
|
||||||
SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)&text[0]);
|
SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)&text[0]);
|
||||||
text = dlg_base::language_from_hz936(L"\u7eff");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_GREEN);
|
||||||
SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)&text[0]);
|
SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)&text[0]);
|
||||||
text = dlg_base::language_from_hz936(L"\u84dd");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_BLUE);
|
||||||
SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)&text[0]);
|
SendMessageW(get_item(IDC_CHANNEL), CB_ADDSTRING, 0, (LPARAM)&text[0]);
|
||||||
}
|
}
|
||||||
cur_ = &rgb_gray_;
|
cur_ = &rgb_gray_;
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
|
|
||||||
class dlg_gamma: public dlg_base
|
class dlg_gamma: public dlg_base
|
||||||
{
|
{
|
||||||
int exit_code_;
|
|
||||||
bool is_color_;
|
bool is_color_;
|
||||||
bool show_all_;
|
bool show_all_;
|
||||||
RECT paint_area_;
|
RECT paint_area_;
|
||||||
|
@ -54,7 +53,6 @@ public:
|
||||||
~dlg_gamma();
|
~dlg_gamma();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int do_modal(HWND parent);
|
|
||||||
void get_gamma(SANE_Gamma* gamma);
|
void get_gamma(SANE_Gamma* gamma);
|
||||||
void set_gamma(const SANE_Gamma* gamma, bool gray);
|
void set_gamma(const SANE_Gamma* gamma, bool gray);
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,17 +20,17 @@ dlg_indicator::dlg_indicator(HWND parent) : dlg_base(parent, IDD_INDICATOR)
|
||||||
|
|
||||||
if (!dlg_base::is_language_pack_default_code_page())
|
if (!dlg_base::is_language_pack_default_code_page())
|
||||||
{
|
{
|
||||||
std::wstring text(dlg_base::language_from_hz936(L"\u6B63\u5728\u626B\u63CF\u2026\u2026"));
|
std::wstring text(local_trans::lang_trans_between_hz936(CONST_STRING_SCANNING));
|
||||||
|
|
||||||
SetWindowTextW(hwnd(), text.c_str());
|
SetWindowTextW(hwnd(), text.c_str());
|
||||||
|
|
||||||
text = dlg_base::language_from_hz936(L"\u7EB8\u5F20");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_PAPER);
|
||||||
set_item_text(IDC_STATIC_PAPER, text.c_str());
|
set_item_text(IDC_STATIC_PAPER, text.c_str());
|
||||||
|
|
||||||
text = dlg_base::language_from_hz936(L"\u56FE\u7247");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_IMAGE);
|
||||||
set_item_text(IDC_STATIC_IMAGE, text.c_str());
|
set_item_text(IDC_STATIC_IMAGE, text.c_str());
|
||||||
|
|
||||||
text = dlg_base::language_from_hz936(L"\u53D6\u6D88");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_CANCEL);
|
||||||
set_item_text(IDCANCEL, text.c_str());
|
set_item_text(IDCANCEL, text.c_str());
|
||||||
|
|
||||||
int paper = get_width_diff_as_text_length(IDC_STATIC_PAPER),
|
int paper = get_width_diff_as_text_length(IDC_STATIC_PAPER),
|
||||||
|
@ -122,20 +122,20 @@ BOOL dlg_indicator::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::string* str = (std::string*)wp;
|
std::string* str = (std::string*)wp;
|
||||||
std::wstring txt(dlg_base::language_from_hz936(L"\u603b\u8ba1\u626b\u63cf\u56fe\u7247"));
|
std::wstring txt(local_trans::lang_trans_between_hz936(CONST_STRING_TOTAL_SCANNED));
|
||||||
|
|
||||||
txt += L": " + std::to_wstring(images_);
|
txt += L": " + std::to_wstring(images_);
|
||||||
SetDlgItemTextW(hwnd_, IDC_STATIC_ERR, txt.c_str());
|
SetDlgItemTextW(hwnd_, IDC_STATIC_ERR, txt.c_str());
|
||||||
delete str;
|
delete str;
|
||||||
SetTimer(hwnd_, 1, 3000, NULL);
|
SetTimer(hwnd_, 1, 3000, NULL);
|
||||||
}
|
}
|
||||||
SetDlgItemTextW(hwnd_, IDCANCEL, dlg_base::language_from_hz936(L"\u5173\u95ed").c_str());
|
SetDlgItemTextW(hwnd_, IDCANCEL, local_trans::lang_trans_between_hz936(CONST_STRING_CLOSE).c_str());
|
||||||
ShowWindow(GetDlgItem(hwnd_, IDC_STATIC_PAPER), SW_HIDE);
|
ShowWindow(GetDlgItem(hwnd_, IDC_STATIC_PAPER), SW_HIDE);
|
||||||
ShowWindow(GetDlgItem(hwnd_, IDC_STATIC_IMAGE), SW_HIDE);
|
ShowWindow(GetDlgItem(hwnd_, IDC_STATIC_IMAGE), SW_HIDE);
|
||||||
ShowWindow(GetDlgItem(hwnd_, IDC_EDIT_PAPER), SW_HIDE);
|
ShowWindow(GetDlgItem(hwnd_, IDC_EDIT_PAPER), SW_HIDE);
|
||||||
ShowWindow(GetDlgItem(hwnd_, IDC_EDIT_IMAGE), SW_HIDE);
|
ShowWindow(GetDlgItem(hwnd_, IDC_EDIT_IMAGE), SW_HIDE);
|
||||||
ShowWindow(GetDlgItem(hwnd_, IDC_STATIC_ERR), SW_SHOW);
|
ShowWindow(GetDlgItem(hwnd_, IDC_STATIC_ERR), SW_SHOW);
|
||||||
SetWindowTextW(hwnd_, dlg_base::language_from_hz936(L"\u626b\u63cf\u7ed3\u675f").c_str());
|
SetWindowTextW(hwnd_, local_trans::lang_trans_between_hz936(CONST_STRING_SCAN_OVER).c_str());
|
||||||
UpdateWindow(hwnd_);
|
UpdateWindow(hwnd_);
|
||||||
break;
|
break;
|
||||||
case WM_TIMER:
|
case WM_TIMER:
|
||||||
|
@ -204,17 +204,17 @@ dlg_choose_dev::dlg_choose_dev(HWND parent, const std::map<std::string, std::str
|
||||||
HWND lst = GetDlgItem(hwnd_, IDC_LIST1);
|
HWND lst = GetDlgItem(hwnd_, IDC_LIST1);
|
||||||
LV_COLUMNW col = { 0 };
|
LV_COLUMNW col = { 0 };
|
||||||
int ind = 0;
|
int ind = 0;
|
||||||
std::wstring text(dlg_base::language_from_hz936(L"\u8BF7\u9009\u62E9\u8BBE\u5907"));
|
std::wstring text(local_trans::lang_trans_between_hz936(CONST_STRING_CHOOSE_DEVICE));
|
||||||
|
|
||||||
SetWindowTextW(hwnd(), text.c_str());
|
SetWindowTextW(hwnd(), text.c_str());
|
||||||
ListView_SetExtendedListViewStyle(lst, ListView_GetExtendedListViewStyle(lst) | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
|
ListView_SetExtendedListViewStyle(lst, ListView_GetExtendedListViewStyle(lst) | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
|
||||||
SetWindowLong(lst, GWL_STYLE, GetWindowLong(lst, GWL_STYLE) | LVS_SINGLESEL);
|
SetWindowLong(lst, GWL_STYLE, GetWindowLong(lst, GWL_STYLE) | LVS_SINGLESEL);
|
||||||
col.mask = LVCF_TEXT | LVCF_WIDTH;
|
col.mask = LVCF_TEXT | LVCF_WIDTH;
|
||||||
col.cx = 180;
|
col.cx = 180;
|
||||||
text = dlg_base::language_from_hz936(L"\u8BBE\u5907\u540D\u79F0");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_DEVICE_NAME);
|
||||||
col.pszText = &text[0];
|
col.pszText = &text[0];
|
||||||
SendMessageW(lst, LVM_INSERTCOLUMN, ind++, (LPARAM)&col);
|
SendMessageW(lst, LVM_INSERTCOLUMN, ind++, (LPARAM)&col);
|
||||||
text = dlg_base::language_from_hz936(L"\u5E8F\u5217\u53F7");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_SERIAL_NUM);
|
||||||
col.pszText = &text[0];
|
col.pszText = &text[0];
|
||||||
SendMessageW(lst, LVM_INSERTCOLUMN, ind++, (LPARAM)&col);
|
SendMessageW(lst, LVM_INSERTCOLUMN, ind++, (LPARAM)&col);
|
||||||
|
|
||||||
|
@ -243,10 +243,10 @@ dlg_choose_dev::dlg_choose_dev(HWND parent, const std::map<std::string, std::str
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
text = dlg_base::language_from_hz936(L"\u53D6\u6D88");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_CANCEL);
|
||||||
set_item_text(IDCANCEL, text.c_str());
|
set_item_text(IDCANCEL, text.c_str());
|
||||||
|
|
||||||
text = dlg_base::language_from_hz936(L"\u786E\u5B9A");
|
text = local_trans::lang_trans_between_hz936(CONST_STRING_OK);
|
||||||
set_item_text(IDOK, text.c_str());
|
set_item_text(IDOK, text.c_str());
|
||||||
}
|
}
|
||||||
dlg_choose_dev::~dlg_choose_dev()
|
dlg_choose_dev::~dlg_choose_dev()
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
// DlgIndicator.cpp: 实现文件
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "DlgInput.h"
|
||||||
|
#include "resource.h"
|
||||||
|
#include "scanned_img.h" // for local_trans
|
||||||
|
#include "mem_dc.h"
|
||||||
|
#include "gb_json.h"
|
||||||
|
|
||||||
|
// CDlgIndicator 对话框
|
||||||
|
|
||||||
|
dlg_input::dlg_input(HWND parent, const wchar_t* init_val) : dlg_base(parent, IDD_INPUT), val_(init_val ? init_val : L"")
|
||||||
|
{
|
||||||
|
create();
|
||||||
|
|
||||||
|
std::wstring title(local_trans::lang_trans_between_hz936(CONST_STRING_INPUT_VAL));
|
||||||
|
|
||||||
|
SetWindowTextW(hwnd(), title.c_str());
|
||||||
|
|
||||||
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_CANCEL);
|
||||||
|
set_item_text(IDCANCEL, title.c_str());
|
||||||
|
|
||||||
|
title = local_trans::lang_trans_between_hz936(CONST_STRING_OK);
|
||||||
|
set_item_text(IDOK, title.c_str());
|
||||||
|
}
|
||||||
|
dlg_input::~dlg_input()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL dlg_input::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
||||||
|
{
|
||||||
|
wchar_t text[40] = { 0 };
|
||||||
|
BOOL ret = TRUE;
|
||||||
|
|
||||||
|
switch (msg)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
on_init_dlg();
|
||||||
|
UpdateWindow(hwnd());
|
||||||
|
break;
|
||||||
|
case WM_COMMAND:
|
||||||
|
handle_command(HIWORD(wp), LOWORD(wp), (HWND)lp);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = FALSE;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
void dlg_input::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
|
{
|
||||||
|
wchar_t cls[128] = { 0 };
|
||||||
|
|
||||||
|
GetClassNameW((HWND)ctrl, cls, _countof(cls) - 1);
|
||||||
|
if (IS_BUTTON(cls))
|
||||||
|
{
|
||||||
|
if (code == BN_CLICKED)
|
||||||
|
{
|
||||||
|
if (id == IDOK || id == IDCANCEL)
|
||||||
|
{
|
||||||
|
if (id == IDOK)
|
||||||
|
{
|
||||||
|
std::wstring input(dlg_base::get_item_text(IDC_EDIT1));
|
||||||
|
|
||||||
|
if (input.empty())
|
||||||
|
{
|
||||||
|
MessageBoxW(hwnd(), local_trans::lang_trans_between_hz936(CONST_STRING_RE_INPUT).c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_NO_INPUT).c_str(), MB_OK | MB_ICONSTOP);
|
||||||
|
SetFocus(get_item(IDC_EDIT1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& v : no_repeats_)
|
||||||
|
{
|
||||||
|
if (v == input)
|
||||||
|
{
|
||||||
|
input += L" " + local_trans::lang_trans_between_hz936(CONST_STRING_ALREADY_EXISTS);
|
||||||
|
::MessageBoxW(hwnd(), input.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_RE_INPUT).c_str(), MB_OK | MB_ICONINFORMATION);
|
||||||
|
SetFocus(get_item(IDC_EDIT1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val_ = std::move(input);
|
||||||
|
}
|
||||||
|
quit_modal(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (IS_EDIT(cls))
|
||||||
|
{
|
||||||
|
//if (code == EN_SETFOCUS)
|
||||||
|
// label_edit_ = (HWND)ctrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void dlg_input::on_init_dlg(void)
|
||||||
|
{
|
||||||
|
dlg_base::set_item_text(IDC_EDIT1, val_.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void dlg_input::set_no_repeats(const std::vector<std::wstring>& vals)
|
||||||
|
{
|
||||||
|
no_repeats_ = vals;
|
||||||
|
}
|
||||||
|
std::wstring dlg_input::get_value(void)
|
||||||
|
{
|
||||||
|
return val_;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "DlgPage.h"
|
||||||
|
|
||||||
|
// CDlgIndicator 对话框
|
||||||
|
|
||||||
|
class dlg_input: public dlg_base
|
||||||
|
{
|
||||||
|
std::vector<std::wstring> no_repeats_;
|
||||||
|
std::wstring val_;
|
||||||
|
|
||||||
|
BOOL handle_message(UINT msg, WPARAM wp, LPARAM lp) override;
|
||||||
|
void handle_command(WORD code, WORD id, HANDLE ctrl);
|
||||||
|
|
||||||
|
void on_init_dlg(void);
|
||||||
|
|
||||||
|
public:
|
||||||
|
dlg_input(HWND parent, const wchar_t* init_val);
|
||||||
|
~dlg_input();
|
||||||
|
|
||||||
|
public:
|
||||||
|
void set_no_repeats(const std::vector<std::wstring>& vals);
|
||||||
|
std::wstring get_value(void);
|
||||||
|
};
|
208
sane/DlgPage.cpp
208
sane/DlgPage.cpp
|
@ -16,13 +16,6 @@
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
#define FLOAT_FORMAT L"%.2f"
|
|
||||||
#define IS_STR_EQUAL(s1, s2) (wcscmp(s1, s2) == 0)
|
|
||||||
#define IS_EDIT(cls) IS_STR_EQUAL(cls, WC_EDITW)
|
|
||||||
#define IS_COMBOX(cls) IS_STR_EQUAL(cls, WC_COMBOBOXW)
|
|
||||||
#define IS_BUTTON(cls) IS_STR_EQUAL(cls, WC_BUTTONW)
|
|
||||||
#define IS_TRACKBAR(cls) IS_STR_EQUAL(cls, TRACKBAR_CLASSW)
|
|
||||||
#define IS_UPDOWN_ARROW(cls) IS_STR_EQUAL(cls, UPDOWN_CLASSW)
|
|
||||||
|
|
||||||
static IMPLEMENT_OPTION_STRING_COMPARE(is_sane_opt);
|
static IMPLEMENT_OPTION_STRING_COMPARE(is_sane_opt);
|
||||||
|
|
||||||
|
@ -140,13 +133,6 @@ int dlg_base::select_combo_text(HWND combo, const wchar_t* text)
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
std::wstring dlg_base::language_from_hz936(const wchar_t* hz936)
|
|
||||||
{
|
|
||||||
std::string utf8(local_trans::u2a(hz936, CP_UTF8));
|
|
||||||
std::wstring lang(local_trans::a2u(from_default_language(utf8.c_str(), nullptr), CP_UTF8));
|
|
||||||
|
|
||||||
return std::move(lang);
|
|
||||||
}
|
|
||||||
std::wstring dlg_base::get_wnd_text(HWND h)
|
std::wstring dlg_base::get_wnd_text(HWND h)
|
||||||
{
|
{
|
||||||
int len = GetWindowTextLengthW(h);
|
int len = GetWindowTextLengthW(h);
|
||||||
|
@ -164,6 +150,91 @@ bool dlg_base::is_language_pack_default_code_page(void)
|
||||||
{
|
{
|
||||||
return lang_get_cur_code_page() == DEFAULT_CODE_PAGE;
|
return lang_get_cur_code_page() == DEFAULT_CODE_PAGE;
|
||||||
}
|
}
|
||||||
|
std::wstring dlg_base::get_menu_text(HMENU menu, int ind)
|
||||||
|
{
|
||||||
|
MENUITEMINFOW mi = { 0 };
|
||||||
|
wchar_t text[128] = { 0 };
|
||||||
|
|
||||||
|
mi.cbSize = sizeof(mi);
|
||||||
|
mi.fMask = mi.fType = MIIM_STRING; // MFT_STRING;
|
||||||
|
mi.dwTypeData = text;
|
||||||
|
mi.cch = _countof(text) - 1;
|
||||||
|
GetMenuItemInfoW(menu, ind, MF_BYPOSITION, &mi);
|
||||||
|
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
int dlg_base::list_insert_column(HWND list_wnd, const wchar_t* text, int cx, int ind)
|
||||||
|
{
|
||||||
|
LVCOLUMNW col = { 0 };
|
||||||
|
|
||||||
|
if (ind == -1)
|
||||||
|
ind = dlg_base::list_get_column_count(list_wnd);
|
||||||
|
col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
|
||||||
|
col.pszText = (LPWSTR)text;
|
||||||
|
col.iSubItem = 0;
|
||||||
|
col.cx = cx;
|
||||||
|
|
||||||
|
return ListView_InsertColumn(list_wnd, ind, &col);
|
||||||
|
}
|
||||||
|
int dlg_base::list_insert_item(HWND list_wnd, const wchar_t* text, int ind)
|
||||||
|
{
|
||||||
|
LV_ITEMW item = { 0 };
|
||||||
|
|
||||||
|
if (ind == -1)
|
||||||
|
ind = dlg_base::list_get_item_count(list_wnd);
|
||||||
|
item.mask = LVIF_TEXT;
|
||||||
|
item.pszText = (PWSTR)text;
|
||||||
|
item.iItem = ind;
|
||||||
|
|
||||||
|
return ListView_InsertItem(list_wnd, &item);
|
||||||
|
}
|
||||||
|
int dlg_base::list_get_item_count(HWND list_wnd)
|
||||||
|
{
|
||||||
|
return ListView_GetItemCount(list_wnd);
|
||||||
|
}
|
||||||
|
int dlg_base::list_get_column_count(HWND list_wnd)
|
||||||
|
{
|
||||||
|
return ListView_GetItemCount((HWND)ListView_GetHeader(list_wnd));
|
||||||
|
}
|
||||||
|
std::wstring dlg_base::list_get_text(HWND list_wnd, int ind, int sub)
|
||||||
|
{
|
||||||
|
LV_ITEMW item = { 0 };
|
||||||
|
wchar_t text[128] = { 0 };
|
||||||
|
|
||||||
|
item.mask = LVIF_TEXT;
|
||||||
|
item.pszText = (PWSTR)text;
|
||||||
|
item.iItem = ind;
|
||||||
|
item.iSubItem = sub;
|
||||||
|
item.cchTextMax = _countof(text) - 1;
|
||||||
|
ListView_GetItem(list_wnd, &item);
|
||||||
|
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
void dlg_base::list_get_selected_items(HWND list_wnd, std::vector<int>& sels)
|
||||||
|
{
|
||||||
|
LV_ITEMW item = { 0 };
|
||||||
|
|
||||||
|
item.mask = LVIF_STATE;
|
||||||
|
for (int i = 0; i < dlg_base::list_get_item_count(list_wnd); ++i)
|
||||||
|
{
|
||||||
|
item.iItem = i;
|
||||||
|
item.stateMask = LVIS_SELECTED;
|
||||||
|
ListView_GetItem(list_wnd, &item);
|
||||||
|
if (item.state & LVIS_SELECTED)
|
||||||
|
sels.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int dlg_base::list_set_item_text(HWND list_wnd, int item, int sub_item, const wchar_t* text)
|
||||||
|
{
|
||||||
|
LV_ITEMW lvi = { 0 };
|
||||||
|
|
||||||
|
lvi.iItem = item;
|
||||||
|
lvi.iSubItem = sub_item;
|
||||||
|
lvi.pszText = (LPWSTR)text;
|
||||||
|
lvi.mask = LVIF_TEXT;
|
||||||
|
|
||||||
|
return ListView_SetItem(list_wnd, &lvi) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL dlg_base::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
BOOL dlg_base::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
||||||
{
|
{
|
||||||
|
@ -183,11 +254,11 @@ void dlg_base::notify_ui_event(int ev)
|
||||||
if (ui_event_notify_)
|
if (ui_event_notify_)
|
||||||
ui_event_notify_(ev, this, ui_notify_param_);
|
ui_event_notify_(ev, this, ui_notify_param_);
|
||||||
}
|
}
|
||||||
gb::sane_config_schm* dlg_base::get_config(void)
|
gb::sane_config_schm* dlg_base::get_config(bool* create)
|
||||||
{
|
{
|
||||||
gb::sane_config_schm* cfg = NULL;
|
gb::sane_config_schm* cfg = NULL;
|
||||||
|
|
||||||
SendMessage(parent_, WM_GET_CONFIG_OBJ, 0, (LPARAM)&cfg);
|
SendMessage(parent_, WM_GET_CONFIG_OBJ, (WPARAM)create, (LPARAM)&cfg);
|
||||||
|
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
@ -264,6 +335,49 @@ void dlg_base::show(bool visible, bool hold)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int dlg_base::do_modal(HWND parent)
|
||||||
|
{
|
||||||
|
BOOL enable_parent = FALSE,
|
||||||
|
got = TRUE;
|
||||||
|
MSG msg = { 0 };
|
||||||
|
|
||||||
|
modal_exit_ = 0;
|
||||||
|
if (IsWindow(parent) && parent != GetDesktopWindow())
|
||||||
|
{
|
||||||
|
EnableWindow(parent, FALSE);
|
||||||
|
enable_parent = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowWindow(hwnd(), SW_SHOW);
|
||||||
|
while ((got = GetMessage(&msg, NULL, 0, 0)))
|
||||||
|
{
|
||||||
|
if ((DWORD)got == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
//if (enable_parent && msg.hwnd == parent &&
|
||||||
|
// msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST &&
|
||||||
|
// msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST)
|
||||||
|
// continue;
|
||||||
|
|
||||||
|
TranslateMessage(&msg);
|
||||||
|
DispatchMessage(&msg);
|
||||||
|
if (modal_exit_)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ShowWindow(hwnd(), SW_HIDE);
|
||||||
|
|
||||||
|
if (enable_parent)
|
||||||
|
{
|
||||||
|
EnableWindow(parent, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return modal_exit_;
|
||||||
|
}
|
||||||
|
void dlg_base::quit_modal(int non_zero_code)
|
||||||
|
{
|
||||||
|
// assert ( non_zero_code );
|
||||||
|
modal_exit_ = non_zero_code;
|
||||||
|
}
|
||||||
void dlg_base::enable(bool enable)
|
void dlg_base::enable(bool enable)
|
||||||
{
|
{
|
||||||
EnableWindow(hwnd_, enable);
|
EnableWindow(hwnd_, enable);
|
||||||
|
@ -299,13 +413,16 @@ HFONT dlg_base::get_font(void)
|
||||||
{
|
{
|
||||||
return (HFONT)SendMessage(hwnd_, WM_GETFONT, 0, 0);
|
return (HFONT)SendMessage(hwnd_, WM_GETFONT, 0, 0);
|
||||||
}
|
}
|
||||||
int dlg_base::get_string_width(const wchar_t* str)
|
int dlg_base::get_string_width(const wchar_t* str, HWND wnd)
|
||||||
{
|
{
|
||||||
HDC hdc = GetWindowDC(hwnd_);
|
if (!wnd)
|
||||||
|
wnd = hwnd_;
|
||||||
|
|
||||||
|
HDC hdc = GetWindowDC(wnd);
|
||||||
SIZE size = { 0 };
|
SIZE size = { 0 };
|
||||||
|
|
||||||
GetTextExtentPointW(hdc, str, lstrlenW(str), &size);
|
GetTextExtentPointW(hdc, str, lstrlenW(str), &size);
|
||||||
ReleaseDC(hwnd_, hdc);
|
ReleaseDC(wnd, hdc);
|
||||||
|
|
||||||
return size.cx;
|
return size.cx;
|
||||||
}
|
}
|
||||||
|
@ -351,6 +468,27 @@ bool dlg_base::set_item_text(UINT id, const wchar_t* text)
|
||||||
{
|
{
|
||||||
return SetWindowTextW(GetDlgItem(hwnd_, id), text) == TRUE;
|
return SetWindowTextW(GetDlgItem(hwnd_, id), text) == TRUE;
|
||||||
}
|
}
|
||||||
|
int dlg_base::set_item_fit_to_text(UINT id)
|
||||||
|
{
|
||||||
|
HWND wnd = get_item(id);
|
||||||
|
std::wstring text(get_item_text(id));
|
||||||
|
RECT r = { 0 };
|
||||||
|
int w = get_string_width(text.c_str(), wnd);
|
||||||
|
|
||||||
|
get_item_rect(id, &r, false);
|
||||||
|
if (w > RECT_W(r) || w <= RECT_W(r) / 2)
|
||||||
|
{
|
||||||
|
if (w > RECT_W(r))
|
||||||
|
w -= RECT_W(r);
|
||||||
|
else
|
||||||
|
w -= RECT_W(r) / 2;
|
||||||
|
expand_item(id, w, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
w = 0;
|
||||||
|
|
||||||
|
return w;
|
||||||
|
}
|
||||||
void dlg_base::show_scroll_bar(int bar, bool show)
|
void dlg_base::show_scroll_bar(int bar, bool show)
|
||||||
{
|
{
|
||||||
DWORD style = GetWindowLong(hwnd(), GWL_STYLE);
|
DWORD style = GetWindowLong(hwnd(), GWL_STYLE);
|
||||||
|
@ -863,7 +1001,8 @@ void dlg_page::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
{
|
{
|
||||||
SANE_Fixed val = SANE_FIX(dlg.x_in_mm());
|
SANE_Fixed val = SANE_FIX(dlg.x_in_mm());
|
||||||
SANE_Int after = 0;
|
SANE_Int after = 0;
|
||||||
gb::sane_config_schm* cfg = get_config();
|
bool created = true;
|
||||||
|
gb::sane_config_schm* cfg = get_config(&created);
|
||||||
|
|
||||||
sane_.sane_control_option_api(dev_, id_custom_left_, SANE_ACTION_SET_VALUE, &val, &after);
|
sane_.sane_control_option_api(dev_, id_custom_left_, SANE_ACTION_SET_VALUE, &val, &after);
|
||||||
if (cfg)
|
if (cfg)
|
||||||
|
@ -882,7 +1021,10 @@ void dlg_page::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
val = SANE_FIX(dlg.y_in_mm() + dlg.h_in_mm());
|
val = SANE_FIX(dlg.y_in_mm() + dlg.h_in_mm());
|
||||||
sane_.sane_control_option_api(dev_, id_custom_bottom_, SANE_ACTION_SET_VALUE, &val, &after);
|
sane_.sane_control_option_api(dev_, id_custom_bottom_, SANE_ACTION_SET_VALUE, &val, &after);
|
||||||
if (cfg)
|
if (cfg)
|
||||||
|
{
|
||||||
cfg->config_changed(id_custom_bottom_, (char*)&val, sizeof(val));
|
cfg->config_changed(id_custom_bottom_, (char*)&val, sizeof(val));
|
||||||
|
cfg->release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -891,6 +1033,7 @@ void dlg_page::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
dlg_gamma dlg(parent_, true);
|
dlg_gamma dlg(parent_, true);
|
||||||
SANE_Gamma gamma = { 0 };
|
SANE_Gamma gamma = { 0 };
|
||||||
unsigned int len = sizeof(gamma);
|
unsigned int len = sizeof(gamma);
|
||||||
|
bool created = true;
|
||||||
|
|
||||||
sane_.sane_io_control_api(dev_, IO_CTRL_CODE_GET_CUSTOM_GAMMA, &gamma, &len);
|
sane_.sane_io_control_api(dev_, IO_CTRL_CODE_GET_CUSTOM_GAMMA, &gamma, &len);
|
||||||
dlg.set_gamma(&gamma, len < 2);
|
dlg.set_gamma(&gamma, len < 2);
|
||||||
|
@ -900,9 +1043,12 @@ void dlg_page::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
dlg.get_gamma(&gamma);
|
dlg.get_gamma(&gamma);
|
||||||
sane_.sane_io_control_api(dev_, IO_CTRL_CODE_SET_CUSTOM_GAMMA, &gamma, &len);
|
sane_.sane_io_control_api(dev_, IO_CTRL_CODE_SET_CUSTOM_GAMMA, &gamma, &len);
|
||||||
|
|
||||||
gb::sane_config_schm* cfg = get_config();
|
gb::sane_config_schm* cfg = get_config(&created);
|
||||||
if (cfg)
|
if (cfg)
|
||||||
|
{
|
||||||
cfg->config_changed(id_custom_gamma_, (char*)&gamma, sizeof(gamma), true);
|
cfg->config_changed(id_custom_gamma_, (char*)&gamma, sizeof(gamma), true);
|
||||||
|
cfg->release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -1149,7 +1295,8 @@ void dlg_page::control_action(HWND wnd)
|
||||||
SANE_Int after = 0;
|
SANE_Int after = 0;
|
||||||
std::string to_v(hg_sane_middleware::option_value_2_string(type, val));
|
std::string to_v(hg_sane_middleware::option_value_2_string(type, val));
|
||||||
SANE_Status statu = sane_.sane_control_option_api(dev_, id - dlg_page::dyn_id_base, SANE_ACTION_SET_VALUE, val, &after);
|
SANE_Status statu = sane_.sane_control_option_api(dev_, id - dlg_page::dyn_id_base, SANE_ACTION_SET_VALUE, val, &after);
|
||||||
gb::sane_config_schm* cfg = get_config();
|
bool created = true;
|
||||||
|
gb::sane_config_schm* cfg = get_config(&created);
|
||||||
done_ = false;
|
done_ = false;
|
||||||
if (cfg)
|
if (cfg)
|
||||||
{
|
{
|
||||||
|
@ -1181,14 +1328,15 @@ void dlg_page::control_action(HWND wnd)
|
||||||
else
|
else
|
||||||
cfg->config_changed(id - dlg_page::dyn_id_base, (char*)val, len);
|
cfg->config_changed(id - dlg_page::dyn_id_base, (char*)val, len);
|
||||||
}
|
}
|
||||||
|
cfg->release();
|
||||||
}
|
}
|
||||||
if (statu == SANE_STATUS_INVAL)
|
if (statu == SANE_STATUS_INVAL)
|
||||||
{
|
{
|
||||||
std::wstring attr(dlg_base::language_from_hz936(L"\u6B64\u8BBE\u5907\u4E0D\u652F\u6301\u5C06") + L" \""
|
std::wstring attr(local_trans::lang_trans_between_hz936(CONST_STRING_NOT_SUPPORT_SET) + L" \""
|
||||||
+ local_trans::a2u(sane_.sane_get_option_descriptor_api(dev_, id - dlg_page::dyn_id_base)->title, CP_UTF8)
|
+ local_trans::a2u(sane_.sane_get_option_descriptor_api(dev_, id - dlg_page::dyn_id_base)->title, CP_UTF8)
|
||||||
+ L"\" " + dlg_base::language_from_hz936(L"\u8BBE\u7F6E\u4E3A") + L": "),
|
+ L"\" " + local_trans::lang_trans_between_hz936(CONST_STRING_SET_TO_BE) + L": "),
|
||||||
attr_v(local_trans::a2u(to_v.c_str(), CP_UTF8));
|
attr_v(local_trans::a2u(to_v.c_str(), CP_UTF8));
|
||||||
MessageBoxW(hwnd(), (attr + attr_v).c_str(), dlg_base::language_from_hz936(L"\u53C2\u6570\u9519\u8BEF").c_str(), MB_OK);
|
MessageBoxW(hwnd(), (attr + attr_v).c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_PARAMETER_ERROR).c_str(), MB_OK);
|
||||||
set_ctrl_value(wnd, type, val, true);
|
set_ctrl_value(wnd, type, val, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1196,11 +1344,11 @@ void dlg_page::control_action(HWND wnd)
|
||||||
std::string tov(hg_sane_middleware::option_value_2_string(type, val));
|
std::string tov(hg_sane_middleware::option_value_2_string(type, val));
|
||||||
if (tov != to_v)
|
if (tov != to_v)
|
||||||
{
|
{
|
||||||
std::wstring attr(dlg_base::language_from_hz936(L"\u539F\u53C2\u6570") + L" \""
|
std::wstring attr(local_trans::lang_trans_between_hz936(CONST_STRING_PARAMETER_ORIGIN) + L" \""
|
||||||
+ local_trans::a2u(to_v.c_str(), CP_UTF8) + L"\" "
|
+ local_trans::a2u(to_v.c_str(), CP_UTF8) + L"\" "
|
||||||
+ dlg_base::language_from_hz936(L"\u4E0D\u7CBE\u786E\u6216\u8BBE\u5907\u4E0D\u652F\u6301\uFF0C\u5DF2\u8C03\u6574\u4E3A")),
|
+ local_trans::lang_trans_between_hz936(CONST_STRING_PARAMETER_INEXACT)),
|
||||||
attr_v(local_trans::a2u(tov.c_str(), CP_UTF8));
|
attr_v(local_trans::a2u(tov.c_str(), CP_UTF8));
|
||||||
MessageBoxW(hwnd(), (attr + attr_v).c_str(), dlg_base::language_from_hz936(L"\u53C2\u6570\u8C03\u6574").c_str(), MB_OK);
|
MessageBoxW(hwnd(), (attr + attr_v).c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_PARAMETER_ADJUSTED).c_str(), MB_OK);
|
||||||
}
|
}
|
||||||
set_ctrl_value(wnd, type, val, false, !(after || statu));
|
set_ctrl_value(wnd, type, val, false, !(after || statu));
|
||||||
}
|
}
|
||||||
|
@ -1389,7 +1537,7 @@ bool dlg_page::add_control(int sn, const SANE_Option_Descriptor* desc, void* cur
|
||||||
// custom area ...
|
// custom area ...
|
||||||
int w = 69;
|
int w = 69;
|
||||||
HWND host = wnd;
|
HWND host = wnd;
|
||||||
std::wstring t(dlg_base::language_from_hz936(L"\u8bbe\u7f6e\u533a\u57df"));
|
std::wstring t(local_trans::lang_trans_between_hz936(CONST_STRING_SET_AREA));
|
||||||
|
|
||||||
id_custom_area_ = sn;
|
id_custom_area_ = sn;
|
||||||
wnd = CreateWindowW(WC_BUTTONW, t.c_str(), WS_CHILD | WS_VISIBLE, pos_.x + text.cx, pos_.y - 1, w, text.cy + 3, hwnd(), NULL, g_my_inst, NULL);
|
wnd = CreateWindowW(WC_BUTTONW, t.c_str(), WS_CHILD | WS_VISIBLE, pos_.x + text.cx, pos_.y - 1, w, text.cy + 3, hwnd(), NULL, g_my_inst, NULL);
|
||||||
|
@ -1418,7 +1566,7 @@ bool dlg_page::add_control(int sn, const SANE_Option_Descriptor* desc, void* cur
|
||||||
// custom gamma control ...
|
// custom gamma control ...
|
||||||
int w = 78;
|
int w = 78;
|
||||||
HWND host = wnd;
|
HWND host = wnd;
|
||||||
std::wstring t(dlg_base::language_from_hz936(L"\u8bbe\u7f6e\u8272\u8c03\u66f2\u7ebf"));
|
std::wstring t(local_trans::lang_trans_between_hz936(CONST_STRING_SET_TONE));
|
||||||
|
|
||||||
id_custom_gamma_ = sn;
|
id_custom_gamma_ = sn;
|
||||||
wnd = CreateWindowW(WC_BUTTONW, t.c_str(), WS_CHILD | WS_VISIBLE, pos_.x + text.cx, pos_.y - 1, w, text.cy + 3, hwnd(), NULL, g_my_inst, NULL);
|
wnd = CreateWindowW(WC_BUTTONW, t.c_str(), WS_CHILD | WS_VISIBLE, pos_.x + text.cx, pos_.y - 1, w, text.cy + 3, hwnd(), NULL, g_my_inst, NULL);
|
||||||
|
|
|
@ -6,17 +6,26 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <sane/sane_ex.h>
|
#include <sane/sane_ex.h>
|
||||||
#include <sane/sane_option_definitions.h>
|
#include <sane/sane_option_definitions.h>
|
||||||
|
#include "const_str.h"
|
||||||
|
|
||||||
// CDlgIndicator 对话框
|
// CDlgIndicator 对话框
|
||||||
#define RECT_W(r) (r.right - r.left)
|
#define FLOAT_FORMAT L"%.2f"
|
||||||
#define RECT_H(r) (r.bottom - r.top)
|
#define IS_STR_EQUAL(s1, s2) (wcscmp(s1, s2) == 0)
|
||||||
|
#define IS_EDIT(cls) IS_STR_EQUAL(cls, WC_EDITW)
|
||||||
|
#define IS_COMBOX(cls) IS_STR_EQUAL(cls, WC_COMBOBOXW)
|
||||||
|
#define IS_BUTTON(cls) IS_STR_EQUAL(cls, WC_BUTTONW)
|
||||||
|
#define IS_TRACKBAR(cls) IS_STR_EQUAL(cls, TRACKBAR_CLASSW)
|
||||||
|
#define IS_UPDOWN_ARROW(cls) IS_STR_EQUAL(cls, UPDOWN_CLASSW)
|
||||||
|
|
||||||
|
#define RECT_W(r) (r.right - r.left)
|
||||||
|
#define RECT_H(r) (r.bottom - r.top)
|
||||||
|
|
||||||
#define WM_SCAN_WORKING WM_USER + 301 // WPARAM: unused; LPARAM: unsed
|
#define WM_SCAN_WORKING WM_USER + 301 // WPARAM: unused; LPARAM: unsed
|
||||||
#define WM_USB_PACKET_RECEIVED WM_USER + 302
|
#define WM_USB_PACKET_RECEIVED WM_USER + 302
|
||||||
#define WM_IMAGE_RECEIVED WM_USER + 303
|
#define WM_IMAGE_RECEIVED WM_USER + 303
|
||||||
#define WM_SCAN_FINISHED WM_USER + 304 // WPARAM: std::string* msg; LPARAM: boo err
|
#define WM_SCAN_FINISHED WM_USER + 304 // WPARAM: std::string* msg; LPARAM: boo err
|
||||||
#define WM_REFRESH_OPTION WM_USER + 311 // WPARAM: source option SN, LPARAM: unused now
|
#define WM_REFRESH_OPTION WM_USER + 311 // WPARAM: source option SN, LPARAM: unused now
|
||||||
#define WM_GET_CONFIG_OBJ WM_USER + 312 // WPARAM: not use, LPARAM: to receive the gb::sane_config* object
|
#define WM_GET_CONFIG_OBJ WM_USER + 312 // WPARAM: bool*, [in]create new if NULL; [out]created, LPARAM: to receive the gb::sane_config* object
|
||||||
|
|
||||||
|
|
||||||
extern HMODULE g_my_inst;
|
extern HMODULE g_my_inst;
|
||||||
|
@ -27,6 +36,8 @@ namespace gb
|
||||||
|
|
||||||
class dlg_base
|
class dlg_base
|
||||||
{
|
{
|
||||||
|
int modal_exit_; // set non-ZERO code to exit modal dialog
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
HWND hwnd_;
|
HWND hwnd_;
|
||||||
HWND parent_;
|
HWND parent_;
|
||||||
|
@ -41,7 +52,7 @@ protected:
|
||||||
virtual void on_font_changed(void);
|
virtual void on_font_changed(void);
|
||||||
void create(void);
|
void create(void);
|
||||||
void notify_ui_event(int ev);
|
void notify_ui_event(int ev);
|
||||||
gb::sane_config_schm* get_config(void);
|
gb::sane_config_schm* get_config(bool* create);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
dlg_base(HWND parent, UINT idd);
|
dlg_base(HWND parent, UINT idd);
|
||||||
|
@ -52,27 +63,38 @@ public:
|
||||||
static bool get_max_size(SIZE& dst, const SIZE& src); // return whether changed dst
|
static bool get_max_size(SIZE& dst, const SIZE& src); // return whether changed dst
|
||||||
static bool get_max_size(SIZE& dst, int cx, int cy); // return whether changed dst
|
static bool get_max_size(SIZE& dst, int cx, int cy); // return whether changed dst
|
||||||
static int select_combo_text(HWND combo, const wchar_t* text);
|
static int select_combo_text(HWND combo, const wchar_t* text);
|
||||||
static std::wstring language_from_hz936(const wchar_t* hz936);
|
|
||||||
static std::wstring get_wnd_text(HWND h);
|
static std::wstring get_wnd_text(HWND h);
|
||||||
static bool is_language_pack_default_code_page(void);
|
static bool is_language_pack_default_code_page(void);
|
||||||
|
static std::wstring get_menu_text(HMENU menu, int ind);
|
||||||
|
|
||||||
|
static int list_insert_column(HWND list_wnd, const wchar_t* text, int cx = 20, int ind = -1);
|
||||||
|
static int list_insert_item(HWND list_wnd, const wchar_t* text, int ind = -1);
|
||||||
|
static int list_get_item_count(HWND list_wnd);
|
||||||
|
static int list_get_column_count(HWND list_wnd);
|
||||||
|
static std::wstring list_get_text(HWND list_wnd, int ind, int sub = 0);
|
||||||
|
static void list_get_selected_items(HWND list_wnd, std::vector<int>& sels);
|
||||||
|
static int list_set_item_text(HWND list_wnd, int item, int sub_item, const wchar_t* text);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_ui_event_notify(void(__stdcall* notify)(int, void*, void*), void* param);
|
void set_ui_event_notify(void(__stdcall* notify)(int, void*, void*), void* param);
|
||||||
HWND hwnd(void);
|
HWND hwnd(void);
|
||||||
void show(bool visible, bool hold = false);
|
void show(bool visible, bool hold = false);
|
||||||
|
int do_modal(HWND parent);
|
||||||
|
void quit_modal(int non_zero_code);
|
||||||
void enable(bool enable);
|
void enable(bool enable);
|
||||||
void screen_2_client(LPRECT r);
|
void screen_2_client(LPRECT r);
|
||||||
void client_2_screen(LPRECT r);
|
void client_2_screen(LPRECT r);
|
||||||
HWND get_item(UINT id);
|
HWND get_item(UINT id);
|
||||||
BOOL set_font(HFONT font);
|
BOOL set_font(HFONT font);
|
||||||
HFONT get_font(void);
|
HFONT get_font(void);
|
||||||
int get_string_width(const wchar_t* str);
|
int get_string_width(const wchar_t* str, HWND wnd = NULL);
|
||||||
bool get_item_rect(UINT id, LPRECT r, bool client = true);
|
bool get_item_rect(UINT id, LPRECT r, bool client = true);
|
||||||
std::wstring get_item_text(UINT id);
|
std::wstring get_item_text(UINT id);
|
||||||
int get_width_diff_as_text_length(UINT id); //
|
int get_width_diff_as_text_length(UINT id); //
|
||||||
void offset_item(UINT id, int dx, int dy);
|
void offset_item(UINT id, int dx, int dy);
|
||||||
void expand_item(UINT id, int dx, int dy);
|
void expand_item(UINT id, int dx, int dy);
|
||||||
bool set_item_text(UINT id, const wchar_t* text);
|
bool set_item_text(UINT id, const wchar_t* text);
|
||||||
|
int set_item_fit_to_text(UINT id); // return difference
|
||||||
void show_scroll_bar(int bar = SB_VERT, bool show = true);
|
void show_scroll_bar(int bar = SB_VERT, bool show = true);
|
||||||
bool track_mouse_hover(void);
|
bool track_mouse_hover(void);
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,10 @@
|
||||||
#include "../../sdk/include/lang/app_language.h"
|
#include "../../sdk/include/lang/app_language.h"
|
||||||
|
|
||||||
// CDlgIndicator 对话框
|
// CDlgIndicator 对话框
|
||||||
|
#include "DlgCfgMgr.h"
|
||||||
|
#include "DlgInput.h"
|
||||||
|
|
||||||
|
#define MENU_CMD_0 ((unsigned short)0x8888)
|
||||||
|
|
||||||
static IMPLEMENT_OPTION_STRING_COMPARE(cmp_sane_opt);
|
static IMPLEMENT_OPTION_STRING_COMPARE(cmp_sane_opt);
|
||||||
|
|
||||||
|
@ -19,10 +22,13 @@ dlg_setting::dlg_setting(HWND parent, LPSANEAPI api, SANE_Handle dev, bool with_
|
||||||
, sane_api_(*api), sane_dev_(dev), with_scan_(with_scan)
|
, sane_api_(*api), sane_dev_(dev), with_scan_(with_scan)
|
||||||
, papers_(0), images_(0), err_(false), tab_(NULL), cfg_(NULL), cfg_file_(L"")
|
, papers_(0), images_(0), err_(false), tab_(NULL), cfg_(NULL), cfg_file_(L"")
|
||||||
{
|
{
|
||||||
std::wstring setting(local_trans::a2u(from_default_language("\350\256\276\347\275\256", nullptr), CP_UTF8));
|
std::wstring setting(local_trans::lang_trans_between_hz936(CONST_STRING_SETTING));
|
||||||
|
|
||||||
create();
|
create();
|
||||||
SetWindowTextW(hwnd(), (std::wstring(name) + L" " + setting).c_str());
|
SetWindowTextW(hwnd(), (std::wstring(name) + L" " + setting).c_str());
|
||||||
|
cfg_menu_ = CreatePopupMenu();
|
||||||
|
InsertMenuW(cfg_menu_, 0, MF_BYPOSITION, MENU_CMD_0, local_trans::lang_trans_between_hz936(CONST_STRING_SAVE_CUR_CFG_AS).c_str());
|
||||||
|
InsertMenuA(cfg_menu_, 1, MF_BYPOSITION | MF_SEPARATOR, MENU_CMD_0 + 1, "");
|
||||||
}
|
}
|
||||||
dlg_setting::~dlg_setting()
|
dlg_setting::~dlg_setting()
|
||||||
{
|
{
|
||||||
|
@ -39,7 +45,15 @@ dlg_setting::~dlg_setting()
|
||||||
}
|
}
|
||||||
DestroyWindow(tab_);
|
DestroyWindow(tab_);
|
||||||
}
|
}
|
||||||
cfg_->end_setting(false);
|
|
||||||
|
gb::sane_config_schm* schm = cfg_->get_scheme();
|
||||||
|
if (schm)
|
||||||
|
{
|
||||||
|
schm->end_setting(false);
|
||||||
|
schm->release();
|
||||||
|
}
|
||||||
|
cfg_->save(local_trans::u2a(cfg_file_.c_str()).c_str());
|
||||||
|
DestroyMenu(cfg_menu_);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL dlg_setting::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
BOOL dlg_setting::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
||||||
|
@ -62,7 +76,19 @@ BOOL dlg_setting::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
||||||
refresh_controls((int)wp);
|
refresh_controls((int)wp);
|
||||||
break;
|
break;
|
||||||
case WM_GET_CONFIG_OBJ:
|
case WM_GET_CONFIG_OBJ:
|
||||||
*((gb::sane_config_schm**)lp) = cfg_;
|
{
|
||||||
|
gb::sane_config_schm* schm = cfg_->get_scheme();
|
||||||
|
if (wp)
|
||||||
|
{
|
||||||
|
if (!schm && *(bool*)wp)
|
||||||
|
{
|
||||||
|
schm = cfg_->create_empty_scheme(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*(bool*)wp = false;
|
||||||
|
}
|
||||||
|
*((gb::sane_config_schm**)lp) = schm;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
|
@ -73,11 +99,70 @@ BOOL dlg_setting::handle_message(UINT msg, WPARAM wp, LPARAM lp)
|
||||||
}
|
}
|
||||||
void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl)
|
void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
{
|
{
|
||||||
if (id == IDOK)
|
if (ctrl == NULL)
|
||||||
{
|
{
|
||||||
if (cfg_)
|
// menu command ...
|
||||||
cfg_->save_to(NULL);
|
if (id == MENU_CMD_0)
|
||||||
|
{
|
||||||
|
// save current scheme as ...
|
||||||
|
gb::sane_config_schm* s = cfg_->get_scheme();
|
||||||
|
if (!s)
|
||||||
|
s = cfg_->copy_scheme(nullptr);
|
||||||
|
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
std::vector<std::string> all;
|
||||||
|
std::vector<std::wstring> allw;
|
||||||
|
std::wstring cur(local_trans::a2u(s->get_scheme_name().c_str(), CP_UTF8));
|
||||||
|
dlg_input dlg(hwnd(), cur.c_str());
|
||||||
|
|
||||||
|
cfg_->get_all_schemes(all);
|
||||||
|
for (auto& v : all)
|
||||||
|
allw.push_back(local_trans::a2u(v.c_str(), CP_UTF8));
|
||||||
|
dlg.set_no_repeats(allw);
|
||||||
|
if (dlg.do_modal(hwnd()) == IDOK)
|
||||||
|
{
|
||||||
|
std::string name(local_trans::u2a(dlg.get_value().c_str(), CP_UTF8));
|
||||||
|
gb::sane_config_schm* n = s->copy();
|
||||||
|
if (cfg_->add_scheme(n, name.c_str()))
|
||||||
|
{
|
||||||
|
cfg_->select_scheme(name.c_str());
|
||||||
|
}
|
||||||
|
n->release();
|
||||||
|
}
|
||||||
|
s->release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(id > MENU_CMD_0 + 1)
|
||||||
|
{
|
||||||
|
// config scheme changed ...
|
||||||
|
std::string schm(local_trans::u2a(dlg_base::get_menu_text(cfg_menu_, id - MENU_CMD_0).c_str(), CP_UTF8));
|
||||||
|
|
||||||
|
if (cfg_->get_current_scheme_name() != schm)
|
||||||
|
{
|
||||||
|
gb::sane_config_schm* s = cfg_->get_scheme();
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
s->end_setting(true);
|
||||||
|
s->release();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cfg_->select_scheme(schm.c_str()))
|
||||||
|
{
|
||||||
|
s = cfg_->get_scheme();
|
||||||
|
apply_scheme_(s, apply_param_);
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
s->release();
|
||||||
|
}
|
||||||
|
refresh_controls(-1);
|
||||||
|
// cfg_->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (id == IDOK)
|
||||||
|
{
|
||||||
notify_over();
|
notify_over();
|
||||||
}
|
}
|
||||||
else if (id == IDC_BUTTON_HELP)
|
else if (id == IDC_BUTTON_HELP)
|
||||||
|
@ -92,9 +177,13 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
refresh_controls(id_restore_);
|
refresh_controls(id_restore_);
|
||||||
if (cfg_)
|
if (cfg_)
|
||||||
{
|
{
|
||||||
cfg_->begin_setting(true);
|
gb::sane_config_schm* schm = cfg_->get_scheme();
|
||||||
cfg_->end_setting(false);
|
if (schm)
|
||||||
cfg_->begin_setting();
|
{
|
||||||
|
schm->end_setting(true);
|
||||||
|
schm->release();
|
||||||
|
}
|
||||||
|
cfg_->select_scheme(nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (id == IDC_BUTTON_SCAN)
|
else if (id == IDC_BUTTON_SCAN)
|
||||||
|
@ -102,6 +191,33 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl)
|
||||||
// enable(false);
|
// enable(false);
|
||||||
notify_ui_event(SANE_EVENT_UI_SCAN_COMMAND);
|
notify_ui_event(SANE_EVENT_UI_SCAN_COMMAND);
|
||||||
}
|
}
|
||||||
|
else if (id == IDC_BUTTON_CONFIG_MGR)
|
||||||
|
{
|
||||||
|
dlg_cfg_mgr dlg(cfg_, hwnd());
|
||||||
|
dlg.do_modal(hwnd());
|
||||||
|
}
|
||||||
|
else if (id == IDC_BUTTON_CONFIG_MENU)
|
||||||
|
{
|
||||||
|
HMENU sub = cfg_menu_; // GetSubMenu(cfg_menu_, 0);
|
||||||
|
int ind = 2;
|
||||||
|
std::vector<std::string> schemes;
|
||||||
|
|
||||||
|
while (DeleteMenu(sub, 2, MF_BYPOSITION));
|
||||||
|
cfg_->get_all_schemes(schemes);
|
||||||
|
for (auto& v : schemes)
|
||||||
|
{
|
||||||
|
UINT flag = MF_BYPOSITION;
|
||||||
|
|
||||||
|
if (v == cfg_->get_current_scheme_name())
|
||||||
|
flag |= MF_CHECKED;
|
||||||
|
InsertMenuW(sub, ind, flag, MENU_CMD_0 + ind, local_trans::a2u(v.c_str(), CP_UTF8).c_str());
|
||||||
|
ind++;
|
||||||
|
}
|
||||||
|
|
||||||
|
RECT r = { 0 };
|
||||||
|
GetWindowRect(get_item(IDC_BUTTON_CONFIG_MENU), &r);
|
||||||
|
TrackPopupMenu(cfg_menu_, TPM_LEFTALIGN | TPM_BOTTOMALIGN, r.left, r.top, 0, hwnd(), NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void dlg_setting::notify_over(void)
|
void dlg_setting::notify_over(void)
|
||||||
{
|
{
|
||||||
|
@ -197,35 +313,32 @@ void dlg_setting::on_init_dialog(void)
|
||||||
page->set_view_size(size);
|
page->set_view_size(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
GetWindowRect(get_item(IDC_BUTTON_SCAN), &r);
|
offset_item(IDC_BUTTON_SCAN, 0, size.cy);
|
||||||
OffsetRect(&r, 0, size.cy);
|
offset_item(IDC_BUTTON_CONFIG_MGR, size.cx - RECT_W(rme), size.cy);
|
||||||
screen_2_client(&r);
|
offset_item(IDC_BUTTON_CONFIG_MENU, size.cx - RECT_W(rme), size.cy);
|
||||||
MoveWindow(get_item(IDC_BUTTON_SCAN), r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE);
|
offset_item(IDC_BUTTON_HELP, size.cx - RECT_W(rme), size.cy);
|
||||||
|
offset_item(IDC_BUTTON_RESTORE, size.cx - RECT_W(rme), size.cy);
|
||||||
|
offset_item(IDOK, size.cx - RECT_W(rme), size.cy);
|
||||||
|
|
||||||
GetWindowRect(get_item(IDC_BUTTON_HELP), &r);
|
ShowWindow(get_item(IDC_BUTTON_CONFIG_MGR), SW_SHOW);
|
||||||
OffsetRect(&r, size.cx - (rme.right - rme.left), size.cy);
|
ShowWindow(get_item(IDC_BUTTON_CONFIG_MENU), SW_SHOW);
|
||||||
screen_2_client(&r);
|
|
||||||
MoveWindow(get_item(IDC_BUTTON_HELP), r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE);
|
|
||||||
|
|
||||||
GetWindowRect(get_item(IDC_BUTTON_RESTORE), &r);
|
|
||||||
OffsetRect(&r, size.cx - (rme.right - rme.left), size.cy);
|
|
||||||
screen_2_client(&r);
|
|
||||||
MoveWindow(get_item(IDC_BUTTON_RESTORE), r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE);
|
|
||||||
|
|
||||||
GetWindowRect(get_item(IDOK), &r);
|
|
||||||
OffsetRect(&r, size.cx - (rme.right - rme.left), size.cy);
|
|
||||||
screen_2_client(&r);
|
|
||||||
MoveWindow(get_item(IDOK), r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE);
|
|
||||||
}
|
}
|
||||||
if (with_scan_)
|
if (with_scan_)
|
||||||
ShowWindow(get_item(IDC_BUTTON_SCAN), SW_SHOW);
|
ShowWindow(get_item(IDC_BUTTON_SCAN), SW_SHOW);
|
||||||
|
|
||||||
if (!dlg_base::is_language_pack_default_code_page())
|
if (!dlg_base::is_language_pack_default_code_page())
|
||||||
{
|
{
|
||||||
::SetDlgItemTextW(hwnd(), IDC_BUTTON_SCAN, dlg_base::language_from_hz936(L"\u626B\u63CF").c_str());
|
std::wstring title(local_trans::lang_trans_between_hz936(CONST_STRING_CFG_MANAGER));
|
||||||
::SetDlgItemTextW(hwnd(), IDC_BUTTON_RESTORE, dlg_base::language_from_hz936(L"\u6062\u590D\u9ED8\u8BA4\u503C").c_str());
|
|
||||||
::SetDlgItemTextW(hwnd(), IDC_BUTTON_HELP, dlg_base::language_from_hz936(L"\u5E2E\u52A9").c_str());
|
::SetDlgItemTextW(hwnd(), IDC_BUTTON_CONFIG_MGR, title.c_str());
|
||||||
::SetDlgItemTextW(hwnd(), IDOK, dlg_base::language_from_hz936(L"\u786E\u5B9A").c_str());
|
y = set_item_fit_to_text(IDC_BUTTON_CONFIG_MGR);
|
||||||
|
if (y)
|
||||||
|
offset_item(IDC_BUTTON_CONFIG_MGR, -y, 0);
|
||||||
|
|
||||||
|
::SetDlgItemTextW(hwnd(), IDC_BUTTON_SCAN, local_trans::lang_trans_between_hz936(CONST_STRING_SCAN).c_str());
|
||||||
|
::SetDlgItemTextW(hwnd(), IDC_BUTTON_RESTORE, local_trans::lang_trans_between_hz936(CONST_STRING_RESTORE).c_str());
|
||||||
|
::SetDlgItemTextW(hwnd(), IDC_BUTTON_HELP, local_trans::lang_trans_between_hz936(CONST_STRING_HELP).c_str());
|
||||||
|
::SetDlgItemTextW(hwnd(), IDOK, local_trans::lang_trans_between_hz936(CONST_STRING_OK).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
select_page(0);
|
select_page(0);
|
||||||
|
@ -363,10 +476,12 @@ void dlg_setting::refresh_controls(int src_sn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dlg_setting::set_config(gb::sane_config_schm* cfg, const wchar_t* file)
|
void dlg_setting::set_config(gb::scanner_cfg* cfg, const wchar_t* file, void(__stdcall* apply)(gb::sane_config_schm*, void*), void* param)
|
||||||
{
|
{
|
||||||
cfg_ = cfg;
|
cfg_ = cfg;
|
||||||
cfg_file_ = file;
|
cfg_file_ = file;
|
||||||
|
apply_scheme_ = apply;
|
||||||
|
apply_param_ = param;
|
||||||
}
|
}
|
||||||
HWND dlg_setting::window(void)
|
HWND dlg_setting::window(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
namespace gb
|
namespace gb
|
||||||
{
|
{
|
||||||
class sane_config_schm;
|
class scanner_cfg;
|
||||||
}
|
}
|
||||||
class dlg_setting : public dlg_base
|
class dlg_setting : public dlg_base
|
||||||
{
|
{
|
||||||
|
@ -29,8 +29,12 @@ class dlg_setting : public dlg_base
|
||||||
bool err_;
|
bool err_;
|
||||||
int id_help_;
|
int id_help_;
|
||||||
int id_restore_;
|
int id_restore_;
|
||||||
gb::sane_config_schm* cfg_;
|
gb::scanner_cfg *cfg_;
|
||||||
std::wstring cfg_file_;
|
std::wstring cfg_file_;
|
||||||
|
|
||||||
|
HMENU cfg_menu_;
|
||||||
|
void(__stdcall* apply_scheme_)(gb::sane_config_schm*, void*);
|
||||||
|
void* apply_param_;
|
||||||
|
|
||||||
HWND tab_;
|
HWND tab_;
|
||||||
|
|
||||||
|
@ -55,7 +59,7 @@ public:
|
||||||
~dlg_setting();
|
~dlg_setting();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_config(gb::sane_config_schm* cfg, const wchar_t* file);
|
void set_config(gb::scanner_cfg* cfg, const wchar_t* file, void(__stdcall* apply)(gb::sane_config_schm*, void*), void* param);
|
||||||
HWND window(void);
|
HWND window(void);
|
||||||
HWND parent(void);
|
HWND parent(void);
|
||||||
//void show(void);
|
//void show(void);
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
// For: const string list
|
||||||
|
//
|
||||||
|
// Date: 2023-02-07
|
||||||
|
//
|
||||||
|
// Format: all strings are defined in unicode
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define CONST_STRING_CUSTOM_AREA L"\u81EA\u5B9A\u4E49\u626B\u63CF\u533A\u57DF"
|
||||||
|
#define CONST_STRING_UNIT L"\u5355\u4F4D"
|
||||||
|
#define CONST_STRING_UNIT_MM L"\u6BEB\u7C73"
|
||||||
|
#define CONST_STRING_UNIT_INCH L"\u82F1\u5BF8"
|
||||||
|
#define CONST_STRING_UNIT_PIXEL L"\u50CF\u7D20"
|
||||||
|
#define CONST_STRING_AREA_SET L"\u533A\u57DF\u8BBE\u7F6E"
|
||||||
|
#define CONST_STRING_LEFT L"\u5DE6"
|
||||||
|
#define CONST_STRING_TOP L"\u4E0A"
|
||||||
|
#define CONST_STRING_WIDTH L"\u5BBD"
|
||||||
|
#define CONST_STRING_HEIGHT L"\u9AD8"
|
||||||
|
#define CONST_STRING_RESTORE_AREA L"\u6062\u590D\u533A\u57DF"
|
||||||
|
#define CONST_STRING_OK L"\u786E\u5B9A"
|
||||||
|
#define CONST_STRING_CANCEL L"\u53D6\u6D88"
|
||||||
|
#define CONST_STRING_MULTIPLE L"\u00d7"
|
||||||
|
#define CONST_STRING_OPT_PAPER L"\u7EB8\u5F20\u5C3A\u5BF8"
|
||||||
|
|
||||||
|
#define CONST_STRING_CFG_MANAGER L"\u914D\u7F6E\u7BA1\u7406"
|
||||||
|
#define CONST_STRING_CFG_SCHEME L"\u914D\u7F6E\u65B9\u6848"
|
||||||
|
#define CONST_STRING_DEL_SELECTED L"\u5220\u9664\u9009\u4E2D\u9879"
|
||||||
|
#define CONST_STRING_DEL_ALL L"\u5168\u90E8\u5220\u9664"
|
||||||
|
#define CONST_STRING_CFG_CONTENT L"\u914D\u7F6E\u5185\u5BB9"
|
||||||
|
#define CONST_STRING_CFG_NAME L"\u914D\u7F6E\u540D\u79F0"
|
||||||
|
|
||||||
|
#define CONST_STRING_CUSTOM_TONE L"\u81EA\u5B9A\u4E49\u8272\u8C03\u66F2\u7EBF"
|
||||||
|
#define CONST_STRING_TONE_SCHEME L"\u8272\u8C03\u65B9\u6848"
|
||||||
|
#define CONST_STRING_COLOR_CHANNEL L"\u989C\u8272\u901A\u9053"
|
||||||
|
#define CONST_STRING_INITIALIZE L"\u521D\u59CB\u5316"
|
||||||
|
#define CONST_STRING_INPUT L"\u8F93\u5165"
|
||||||
|
#define CONST_STRING_OUTPUT L"\u8F93\u51FA"
|
||||||
|
#define CONST_STRING_CUSTOM L"\u81EA\u5B9A\u4E49"
|
||||||
|
#define CONST_STRING_NEG_PHOTO L"\u8d1f\u7247"
|
||||||
|
#define CONST_STRING_COLOR_NEG_PHOTO L"\u5f69\u8272\u8d1f\u7247"
|
||||||
|
#define CONST_STRING_DARKER L"\u8f83\u6697"
|
||||||
|
#define CONST_STRING_BRIGHTER L"\u8f83\u4eae"
|
||||||
|
#define CONST_STRING_RED L"\u7ea2"
|
||||||
|
#define CONST_STRING_GREEN L"\u7eff"
|
||||||
|
#define CONST_STRING_BLUE L"\u84dd"
|
||||||
|
#define CONST_STRING_GRAY L"\u7070"
|
||||||
|
|
||||||
|
#define CONST_STRING_SCANNING L"\u6B63\u5728\u626B\u63CF\u2026\u2026"
|
||||||
|
#define CONST_STRING_PAPER L"\u7EB8\u5F20"
|
||||||
|
#define CONST_STRING_IMAGE L"\u56FE\u7247"
|
||||||
|
#define CONST_STRING_TOTAL_SCANNED L"\u603b\u8ba1\u626b\u63cf\u56fe\u7247"
|
||||||
|
#define CONST_STRING_CLOSE L"\u5173\u95ed"
|
||||||
|
#define CONST_STRING_SCAN_OVER L"\u626b\u63cf\u7ed3\u675f"
|
||||||
|
|
||||||
|
#define CONST_STRING_CHOOSE_DEVICE L"\u8BF7\u9009\u62E9\u8BBE\u5907"
|
||||||
|
#define CONST_STRING_DEVICE_NAME L"\u8BBE\u5907\u540D\u79F0"
|
||||||
|
#define CONST_STRING_SERIAL_NUM L"\u5E8F\u5217\u53F7"
|
||||||
|
|
||||||
|
#define CONST_STRING_INPUT_VAL L"\u8BF7\u8F93\u5165\u65B0\u503C"
|
||||||
|
#define CONST_STRING_RE_INPUT L"\u8BF7\u91CD\u65B0\u8F93\u5165"
|
||||||
|
#define CONST_STRING_NO_INPUT L"\u6CA1\u6709\u8F93\u5165\u5185\u5BB9"
|
||||||
|
#define CONST_STRING_ALREADY_EXISTS L"\u5DF2\u7ECF\u5B58\u5728"
|
||||||
|
|
||||||
|
#define CONST_STRING_NOT_SUPPORT_SET L"\u6B64\u8BBE\u5907\u4E0D\u652F\u6301\u5C06"
|
||||||
|
#define CONST_STRING_SET_TO_BE L"\u8BBE\u7F6E\u4E3A"
|
||||||
|
#define CONST_STRING_PARAMETER_ERROR L"\u53C2\u6570\u9519\u8BEF"
|
||||||
|
#define CONST_STRING_PARAMETER_ORIGIN L"\u539F\u53C2\u6570"
|
||||||
|
#define CONST_STRING_PARAMETER_INEXACT L"\u4E0D\u7CBE\u786E\u6216\u8BBE\u5907\u4E0D\u652F\u6301\uFF0C\u5DF2\u8C03\u6574\u4E3A"
|
||||||
|
#define CONST_STRING_PARAMETER_ADJUSTED L"\u53C2\u6570\u8C03\u6574"
|
||||||
|
#define CONST_STRING_SET_AREA L"\u8bbe\u7f6e\u533a\u57df"
|
||||||
|
#define CONST_STRING_SET_TONE L"\u8bbe\u7f6e\u8272\u8c03\u66f2\u7ebf"
|
||||||
|
|
||||||
|
#define CONST_STRING_SETTING L"\u8BBE\u7F6E"
|
||||||
|
#define CONST_STRING_SAVE_CUR_CFG_AS L"\u5F53\u524D\u914D\u7F6E\u53E6\u5B58\u4E3A"
|
||||||
|
#define CONST_STRING_SCAN L"\u626B\u63CF"
|
||||||
|
#define CONST_STRING_RESTORE L"\u6062\u590D\u9ED8\u8BA4\u503C"
|
||||||
|
#define CONST_STRING_HELP L"\u5E2E\u52A9"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define CONST_STRING_OPEN_FAILED L"\u6253\u5F00\u5931\u8D25"
|
||||||
|
#define CONST_STRING_START_FAILED L"\u542F\u52A8\u5931\u8D25"
|
||||||
|
#define CONST_STRING_ERROR L"\u9519\u8BEF"
|
||||||
|
|
1836
sane/gb_json.cpp
1836
sane/gb_json.cpp
File diff suppressed because it is too large
Load Diff
155
sane/gb_json.h
155
sane/gb_json.h
|
@ -37,55 +37,103 @@ namespace gb
|
||||||
|
|
||||||
class json : public refer
|
class json : public refer
|
||||||
{
|
{
|
||||||
cJSON *obj_;
|
enum val_type
|
||||||
cJSON *cur_child_;
|
{
|
||||||
cJSON walk_head_;
|
VAL_TYPE_NULL = 0,
|
||||||
bool is_array_;
|
VAL_TYPE_BOOL,
|
||||||
|
VAL_TYPE_INT,
|
||||||
|
VAL_TYPE_FLOAT,
|
||||||
|
VAL_TYPE_STRING,
|
||||||
|
VAL_TYPE_OBJECT,
|
||||||
|
VAL_TYPE_ARRAY,
|
||||||
|
};
|
||||||
|
val_type type_;
|
||||||
|
std::string key_;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
bool bval;
|
||||||
|
int nval;
|
||||||
|
double dval;
|
||||||
|
}simple_val_;
|
||||||
|
std::string strval_;
|
||||||
|
std::vector<json*> arr_val_;
|
||||||
|
size_t cur_child_;
|
||||||
|
|
||||||
cJSON* find_sibling(cJSON* first, const char* name, cJSON*** addr);
|
static std::string object_key(json* jsn);
|
||||||
cJSON* find_child(cJSON *parent, std::vector<std::string>& path, bool create, cJSON*** addr = NULL);
|
static std::string array_key(json* jsn);
|
||||||
cJSON* find(const char* path, bool create = false, cJSON*** addr = NULL);
|
|
||||||
|
|
||||||
protected:
|
void from_cjson(cJSON* cj);
|
||||||
~json();
|
json* find_child(const char* key, bool remove = false);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
json(char* json_txt = 0);
|
json(char* json_txt = 0);
|
||||||
|
|
||||||
static std::string to_string(cJSON* root, bool formatted);
|
protected:
|
||||||
static std::string get_value_as_string(cJSON* root, bool integer = false);
|
json(const char* key, bool val);
|
||||||
static void free_node_data(cJSON* node);
|
json(const char* key, int val);
|
||||||
static cJSON* create_element(bool is_array = false);
|
json(const char* key, double val);
|
||||||
static cJSON* create_element_with_name(const char* name);
|
json(const char* key, const char* val);
|
||||||
|
json(json& r);
|
||||||
|
~json();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
// parse/un-parse ...
|
||||||
|
void copy_from(json& r);
|
||||||
bool attach_text(char* json_txt);
|
bool attach_text(char* json_txt);
|
||||||
bool attach_cjson(cJSON* cjson);
|
void clear(bool as_array = false);
|
||||||
bool create_empty(bool array = false);
|
std::string to_string(void);
|
||||||
void clear(void);
|
|
||||||
std::string to_string(bool formatted);
|
|
||||||
|
|
||||||
// can be path: child/value ...
|
// attributes ...
|
||||||
|
std::string& key(void);
|
||||||
|
bool is_array(void);
|
||||||
|
bool is_leaf_node(void); // whether this object is a leaf node contains final value
|
||||||
|
|
||||||
|
// value access ...
|
||||||
bool get_value(const char* key, bool& val);
|
bool get_value(const char* key, bool& val);
|
||||||
bool get_value(const char* key, int& val);
|
bool get_value(const char* key, int& val);
|
||||||
bool get_value(const char* key, double& val);
|
bool get_value(const char* key, double& val);
|
||||||
bool get_value(const char* key, std::string& val);
|
bool get_value(const char* key, std::string& val);
|
||||||
bool get_value(const char* key, json*& val); // caller shoud call "delete" to free the returned object !!!
|
bool get_value(const char* key, json*& val);
|
||||||
bool get_value_as_string(const char* key, std::string& val, bool integer);
|
|
||||||
bool get_as_array(const char* key, std::vector<std::string>& val);
|
|
||||||
|
|
||||||
bool first_child(std::string& val, std::string* name = NULL);
|
// enumeration ...
|
||||||
bool next_child(std::string& val, std::string* name = NULL);
|
size_t children(void); // return children count if was object or array, or else -1 returned
|
||||||
|
json* child(size_t ind);
|
||||||
|
json* first_child(void);
|
||||||
|
json* next_child(void);
|
||||||
|
|
||||||
|
// change the item matching 'key', otherwise add a new item
|
||||||
bool set_value(const char* key, bool val);
|
bool set_value(const char* key, bool val);
|
||||||
bool set_value(const char* key, int val);
|
bool set_value(const char* key, int val);
|
||||||
bool set_value(const char* key, double val);
|
bool set_value(const char* key, double val);
|
||||||
bool set_value(const char* key, std::string val);
|
|
||||||
bool set_value(const char* key, const char* val);
|
bool set_value(const char* key, const char* val);
|
||||||
bool set_value(const char* key, json* obj);
|
bool set_value(const char* key, json* val);
|
||||||
|
|
||||||
bool change_key(const char* old_key, const char* new_key);
|
// operator+= only for array
|
||||||
|
json& operator+=(bool val);
|
||||||
|
json& operator+=(int val);
|
||||||
|
json& operator+=(double val);
|
||||||
|
json& operator+=(const char* val);
|
||||||
|
json& operator+=(json* val);
|
||||||
|
|
||||||
|
// remove item
|
||||||
|
json& operator-=(int ind);
|
||||||
bool remove(const char* key);
|
bool remove(const char* key);
|
||||||
|
bool remove(json* child);
|
||||||
|
bool remove(int ind);
|
||||||
|
|
||||||
|
// position management
|
||||||
|
int index(json* child);
|
||||||
|
int index_move_to(json* child, int ind);
|
||||||
|
|
||||||
|
// leaf node value ...
|
||||||
|
bool value(bool& val);
|
||||||
|
bool value(int& val);
|
||||||
|
bool value(double& val);
|
||||||
|
bool value(std::string& val);
|
||||||
|
json& operator=(bool val);
|
||||||
|
json& operator=(int val);
|
||||||
|
json& operator=(double val);
|
||||||
|
json& operator=(const char* val);
|
||||||
};
|
};
|
||||||
|
|
||||||
class base64
|
class base64
|
||||||
|
@ -115,9 +163,8 @@ namespace gb
|
||||||
std::string file_;
|
std::string file_;
|
||||||
json* jsn_;
|
json* jsn_;
|
||||||
json* bkp_;
|
json* bkp_;
|
||||||
json* def_val_;
|
json* def_val_; // name_id: id, name_val: val
|
||||||
bool in_setting_;
|
bool in_setting_;
|
||||||
std::map<int, std::string> id_name_; // (id, default-val)
|
|
||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
std::string default_value(const char* name);
|
std::string default_value(const char* name);
|
||||||
|
@ -129,19 +176,30 @@ namespace gb
|
||||||
sane_config_schm(scanner_cfg* scanner = nullptr);
|
sane_config_schm(scanner_cfg* scanner = nullptr);
|
||||||
|
|
||||||
static std::string opt_data_appendix_;
|
static std::string opt_data_appendix_;
|
||||||
|
static std::string opt_def_id_appendix_;
|
||||||
|
static std::string opt_def_val_appendix_;
|
||||||
|
static std::string opt_def_type_appendix_;
|
||||||
|
static std::string opt_def_title_appendix_;
|
||||||
|
|
||||||
static bool hex(unsigned char ch, unsigned char* val);
|
static bool hex(unsigned char ch, unsigned char* val);
|
||||||
static bool hex_char(const char* data, unsigned char* val);
|
static bool hex_char(const char* data, unsigned char* val);
|
||||||
static std::string to_hex_letter(const char* data, size_t bytes);
|
static std::string to_hex_letter(const char* data, size_t bytes);
|
||||||
static std::string from_hex_letter(const char* data, size_t bytes);
|
static std::string from_hex_letter(const char* data, size_t bytes);
|
||||||
static bool is_option_data(std::string& name); // reset baase option name into 'name' if name was option data, and return true
|
static bool is_option_data(std::string& name); // reset baase option name into 'name' if name was option data, and return true
|
||||||
|
static void set_default_value(json* jsn, int id, const char* name, const char* title, void* data, size_t bytes, int type);
|
||||||
|
static int option_name_2_id(json* jsn, const char* name);
|
||||||
|
static int option_type(json* jsn, const char* name);
|
||||||
|
static std::string option_title(json* jsn, const char* name);
|
||||||
|
static std::string option_default_value(json* jsn, const char* name);
|
||||||
|
static std::string sane_option_value_2_string(void* val, size_t bytes, int type);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
sane_config_schm* copy(void);
|
sane_config_schm* copy(void);
|
||||||
bool load_from_file(const char* file);
|
bool load_from_file(const char* file);
|
||||||
bool load_from_mem(const char* mem, bool in_b64 = true);
|
bool load_from_mem(const char* mem, bool in_b64 = true);
|
||||||
bool save_to(const char* file);
|
bool save_to(const char* file);
|
||||||
void set_default_value(int sn, const char* name, const char* val, size_t bytes);
|
void set_default_value(int sn, const char* name, const char* title, const char* val, size_t bytes, int type);
|
||||||
void copy_default_value(sane_config_schm* from);
|
|
||||||
bool first_config(std::string& name, std::string& val);
|
bool first_config(std::string& name, std::string& val);
|
||||||
bool next_config(std::string& name, std::string& val);
|
bool next_config(std::string& name, std::string& val);
|
||||||
bool get_config(const char* name, std::string& val);
|
bool get_config(const char* name, std::string& val);
|
||||||
|
@ -150,14 +208,15 @@ namespace gb
|
||||||
void config_changed(int sn, const char* val, size_t bytes, bool extra = false);
|
void config_changed(int sn, const char* val, size_t bytes, bool extra = false);
|
||||||
void remove_config(const char* name);
|
void remove_config(const char* name);
|
||||||
void set_value(const char* name, const char* val, size_t bytes, bool extra = false);
|
void set_value(const char* name, const char* val, size_t bytes, bool extra = false);
|
||||||
bool has_changed(void);
|
bool has_changed(int* items = nullptr);
|
||||||
void end_setting(bool cancel);
|
void end_setting(bool cancel);
|
||||||
int id_from_name(const char* name);
|
int id_from_name(const char* name);
|
||||||
std::string to_text_stream(bool b64 = true, bool with_ver = true);
|
std::string to_text_stream(bool b64 = true, bool with_ver = true);
|
||||||
std::string get_version(void);
|
std::string get_version(void);
|
||||||
std::string get_scheme_name(void);
|
std::string get_scheme_name(void);
|
||||||
void set_scheme_name(const char* name);
|
void set_scheme_name(const char* name);
|
||||||
void update(bool(* is_float)(int, void*), void* param, const char*(* t2n)(const char*), std::string* discard = NULL);
|
|
||||||
|
std::string auto_gen_scheme_name(const char* (__stdcall* lang_trans)(const char*, bool/*true - default language to cur language*/, void*), void* param);
|
||||||
};
|
};
|
||||||
|
|
||||||
class scanner_cfg : public refer
|
class scanner_cfg : public refer
|
||||||
|
@ -178,12 +237,23 @@ namespace gb
|
||||||
std::string path_;
|
std::string path_;
|
||||||
std::string scanner_name_; // scanner type: HUAGOSCAN G100 - 0100
|
std::string scanner_name_; // scanner type: HUAGOSCAN G100 - 0100
|
||||||
json *global_; // version, current scheme, ...
|
json *global_; // version, current scheme, ...
|
||||||
|
json *opt_default_value_;
|
||||||
|
|
||||||
|
const char* (__stdcall* lang_trans_)(const char*, bool/*true - default language to cur language*/, void*);
|
||||||
|
void* lang_param_;
|
||||||
|
|
||||||
typedef struct _cfg_schm
|
typedef struct _cfg_schm
|
||||||
{
|
{
|
||||||
std::string name;
|
std::string name;
|
||||||
|
bool should_rename;
|
||||||
sane_config_schm* schm;
|
sane_config_schm* schm;
|
||||||
|
|
||||||
|
struct _cfg_schm()
|
||||||
|
{
|
||||||
|
name = "";
|
||||||
|
should_rename = false;
|
||||||
|
schm = nullptr;
|
||||||
|
}
|
||||||
bool operator==(const char* n)
|
bool operator==(const char* n)
|
||||||
{
|
{
|
||||||
return name == n;
|
return name == n;
|
||||||
|
@ -191,14 +261,12 @@ namespace gb
|
||||||
}CFGSCHM;
|
}CFGSCHM;
|
||||||
std::vector<CFGSCHM> schemes_;
|
std::vector<CFGSCHM> schemes_;
|
||||||
|
|
||||||
static std::string global_name_;
|
static const char* __stdcall language_trans(const char* in, bool from_def, void* param);
|
||||||
static std::string cur_sel_;
|
|
||||||
static std::string default_setting_name_;
|
|
||||||
|
|
||||||
void clear(void);
|
void clear(void);
|
||||||
void init_version(void);
|
void init_version(void);
|
||||||
void init_select(void);
|
void init_select(void);
|
||||||
void walk_sibling_schemes(cJSON* first);
|
const char* trans_language(const char* in, bool from_default);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
~scanner_cfg();
|
~scanner_cfg();
|
||||||
|
@ -215,20 +283,31 @@ namespace gb
|
||||||
}UDF, *LPUDF;
|
}UDF, *LPUDF;
|
||||||
static bool update(const char* file, LPUDF func);
|
static bool update(const char* file, LPUDF func);
|
||||||
|
|
||||||
|
static std::string global_name_;
|
||||||
|
static std::string cur_sel_;
|
||||||
|
static std::string default_setting_name_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int load_file(const char* file);
|
int load_file(const char* file);
|
||||||
int load_mem(const char* mem);
|
int load_mem(const char* mem);
|
||||||
int save(const char* file = nullptr);
|
int save(const char* file = nullptr);
|
||||||
|
void set_language_transform(const char* (__stdcall* lang_trans)(const char*, bool/*true - default language to cur language*/, void*), void* param);
|
||||||
|
|
||||||
|
json* get_option_default_value(void);
|
||||||
void get_all_schemes(std::vector<std::string>& schemes); // return all schemes name queue, the first is always be 'Default settings'
|
void get_all_schemes(std::vector<std::string>& schemes); // return all schemes name queue, the first is always be 'Default settings'
|
||||||
sane_config_schm* get_scheme(const char* scheme_name = nullptr/*return current scheme if was null*/); // call sane_config_schm::release() if not use anymore
|
sane_config_schm* get_scheme(const char* scheme_name = nullptr/*return current scheme if was null*/); // call sane_config_schm::release() if not use anymore
|
||||||
|
sane_config_schm* create_empty_scheme(bool selected); // create an empty scheme and add to scheme queue
|
||||||
std::string get_current_scheme_name(void);
|
std::string get_current_scheme_name(void);
|
||||||
|
std::string to_text_stream(void);
|
||||||
|
void set_default_value(int id, const char* name, const char* title, void* data, size_t bytes, int type);
|
||||||
|
int option_value_type(const char* name);
|
||||||
|
std::string option_title(const char* name);
|
||||||
bool remove_scheme(const char* scheme_name);
|
bool remove_scheme(const char* scheme_name);
|
||||||
void remove_all_schemes(void);
|
void remove_all_schemes(void);
|
||||||
bool select_scheme(const char* scheme_name);
|
bool select_scheme(const char* scheme_name);
|
||||||
|
|
||||||
sane_config_schm* copy_scheme(const char* cp_from_name); // for UI setting, call release() if not use anymore
|
sane_config_schm* copy_scheme(const char* cp_from_name); // for UI setting, call release() if not use anymore
|
||||||
bool add_scheme(sane_config_schm* schm, const char* name = nullptr);
|
bool add_scheme(sane_config_schm* schm, const char* name = nullptr, bool should_rename = false);
|
||||||
bool rename_scheme(const char* from, const char* to);
|
bool rename_scheme(const char* from, const char* to);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
#define IDD_AREA 106
|
#define IDD_AREA 106
|
||||||
#define IDD_GAMMA 107
|
#define IDD_GAMMA 107
|
||||||
#define IDD_CHOOSE_DEV 108
|
#define IDD_CHOOSE_DEV 108
|
||||||
|
#define IDD_CFG_MGR 109
|
||||||
|
#define IDD_INPUT 110
|
||||||
#define IDC_EDIT_PAPER 1001
|
#define IDC_EDIT_PAPER 1001
|
||||||
#define IDC_EDIT_IMAGE 1002
|
#define IDC_EDIT_IMAGE 1002
|
||||||
#define IDC_STATIC_PAPER 1003
|
#define IDC_STATIC_PAPER 1003
|
||||||
|
@ -21,8 +23,11 @@
|
||||||
#define IDC_UNIT2 1009
|
#define IDC_UNIT2 1009
|
||||||
#define IDC_SCHEME 1009
|
#define IDC_SCHEME 1009
|
||||||
#define IDC_EDIT_DPI 1010
|
#define IDC_EDIT_DPI 1010
|
||||||
|
#define IDC_BUTTON_CONFIG_MGR 1010
|
||||||
#define IDC_BUTTON_RESET 1011
|
#define IDC_BUTTON_RESET 1011
|
||||||
|
#define IDC_BUTTON_CONFIG_MENU 1011
|
||||||
#define IDC_EDIT_x 1012
|
#define IDC_EDIT_x 1012
|
||||||
|
#define IDC_BUTTON_DEL_SEL 1012
|
||||||
#define IDC_EDIT_y 1013
|
#define IDC_EDIT_y 1013
|
||||||
#define IDC_EDIT_W 1014
|
#define IDC_EDIT_W 1014
|
||||||
#define IDC_EDIT_H 1015
|
#define IDC_EDIT_H 1015
|
||||||
|
@ -42,6 +47,9 @@
|
||||||
#define IDC_STATIC_COLOR 1029
|
#define IDC_STATIC_COLOR 1029
|
||||||
#define IDC_STATIC_INPUT 1030
|
#define IDC_STATIC_INPUT 1030
|
||||||
#define IDC_STATIC_OUTPUT 1031
|
#define IDC_STATIC_OUTPUT 1031
|
||||||
|
#define IDC_BUTTON_DEL_ALL 1032
|
||||||
|
#define IDC_EDIT1 1033
|
||||||
|
#define IDC_STATIC_SKETCH 1034
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
|
@ -49,7 +57,7 @@
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 109
|
#define _APS_NEXT_RESOURCE_VALUE 109
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1032
|
#define _APS_NEXT_CONTROL_VALUE 1035
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
74
sane/sane.rc
74
sane/sane.rc
|
@ -68,10 +68,12 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
|
||||||
CAPTION "Dialog"
|
CAPTION "Dialog"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "确定",IDOK,223,8,33,13
|
DEFPUSHBUTTON "确定",IDOK,223,7,33,14
|
||||||
PUSHBUTTON "ɨÃè",IDC_BUTTON_SCAN,7,7,39,14,NOT WS_VISIBLE
|
PUSHBUTTON "ɨÃè",IDC_BUTTON_SCAN,7,7,39,14,NOT WS_VISIBLE
|
||||||
PUSHBUTTON "恢复默认值",IDC_BUTTON_RESTORE,113,7,48,14,NOT WS_VISIBLE
|
PUSHBUTTON "恢复默认值",IDC_BUTTON_RESTORE,121,7,45,14,NOT WS_VISIBLE
|
||||||
PUSHBUTTON "帮助",IDC_BUTTON_HELP,167,7,48,14,NOT WS_VISIBLE
|
PUSHBUTTON "帮助",IDC_BUTTON_HELP,167,7,45,14,NOT WS_VISIBLE
|
||||||
|
PUSHBUTTON "配置管理",IDC_BUTTON_CONFIG_MGR,57,7,38,14,NOT WS_VISIBLE
|
||||||
|
PUSHBUTTON ">",IDC_BUTTON_CONFIG_MENU,94,7,8,14,NOT WS_VISIBLE
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_PAGE DIALOGEX 0, 0, 258, 133
|
IDD_PAGE DIALOGEX 0, 0, 258, 133
|
||||||
|
@ -135,6 +137,30 @@ BEGIN
|
||||||
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,253,62
|
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,253,62
|
||||||
END
|
END
|
||||||
|
|
||||||
|
IDD_CFG_MGR DIALOGEX 0, 0, 229, 218
|
||||||
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
|
||||||
|
CAPTION "配置管理"
|
||||||
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
PUSHBUTTON "全部删除",IDC_BUTTON_DEL_ALL,172,7,50,14
|
||||||
|
DEFPUSHBUTTON "确定",IDOK,189,198,33,13
|
||||||
|
LTEXT "配置方案:",IDC_STATIC_PAPER,7,9,40,8
|
||||||
|
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_EDITLABELS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,22,215,62
|
||||||
|
PUSHBUTTON "删除选中项",IDC_BUTTON_DEL_SEL,115,7,50,14
|
||||||
|
GROUPBOX "配置内容:",IDC_STATIC_SKETCH,7,95,215,101
|
||||||
|
EDITTEXT IDC_EDIT1,14,109,204,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_INPUT DIALOGEX 0, 0, 193, 41
|
||||||
|
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
|
||||||
|
CAPTION "请输入新值:"
|
||||||
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
EDITTEXT IDC_EDIT1,7,7,179,12,ES_AUTOHSCROLL
|
||||||
|
PUSHBUTTON "确定",IDOK,144,22,42,12
|
||||||
|
PUSHBUTTON "取消",IDCANCEL,7,22,42,12
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -191,6 +217,22 @@ BEGIN
|
||||||
TOPMARGIN, 7
|
TOPMARGIN, 7
|
||||||
BOTTOMMARGIN, 89
|
BOTTOMMARGIN, 89
|
||||||
END
|
END
|
||||||
|
|
||||||
|
IDD_CFG_MGR, DIALOG
|
||||||
|
BEGIN
|
||||||
|
LEFTMARGIN, 7
|
||||||
|
RIGHTMARGIN, 222
|
||||||
|
TOPMARGIN, 7
|
||||||
|
BOTTOMMARGIN, 211
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_INPUT, DIALOG
|
||||||
|
BEGIN
|
||||||
|
LEFTMARGIN, 7
|
||||||
|
RIGHTMARGIN, 186
|
||||||
|
TOPMARGIN, 7
|
||||||
|
BOTTOMMARGIN, 34
|
||||||
|
END
|
||||||
END
|
END
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
@ -230,6 +272,16 @@ BEGIN
|
||||||
0
|
0
|
||||||
END
|
END
|
||||||
|
|
||||||
|
IDD_CFG_MGR AFX_DIALOG_LAYOUT
|
||||||
|
BEGIN
|
||||||
|
0
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_INPUT AFX_DIALOG_LAYOUT
|
||||||
|
BEGIN
|
||||||
|
0
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -271,8 +323,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 4,34,10000,22310
|
FILEVERSION 4,37,20000,23034
|
||||||
PRODUCTVERSION 4,34,10000,22310
|
PRODUCTVERSION 4,37,20000,23034
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -287,14 +339,14 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "080404b0"
|
BLOCK "080404b0"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "宁波华高信息科技有限公司"
|
VALUE "CompanyName", "上海中晶科技有限公司"
|
||||||
VALUE "FileDescription", "华高扫描仪应用程序"
|
VALUE "FileDescription", "中晶扫描仪应用程序"
|
||||||
VALUE "FileVersion", "4.34.10000.22310"
|
VALUE "FileVersion", "4.37.20000.23034"
|
||||||
VALUE "InternalName", "sane.dll"
|
VALUE "InternalName", "sane.dll"
|
||||||
VALUE "LegalCopyright", "Copyright (C) HUAGOScan 2022"
|
VALUE "LegalCopyright", "Copyright (C) MICROTEKScan 2023"
|
||||||
VALUE "OriginalFilename", "sane.dll"
|
VALUE "OriginalFilename", "sane.dll"
|
||||||
VALUE "ProductName", "HUAGOScan"
|
VALUE "ProductName", "MICROTEKScan"
|
||||||
VALUE "ProductVersion", "4.34.10000.22310"
|
VALUE "ProductVersion", "4.37.20000.23034"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -200,8 +200,10 @@
|
||||||
<ClCompile Include="..\..\code_device\hgsane\sane_hg_mdw.cpp" />
|
<ClCompile Include="..\..\code_device\hgsane\sane_hg_mdw.cpp" />
|
||||||
<ClCompile Include="..\..\code_device\hgsane\sane_option.cpp" />
|
<ClCompile Include="..\..\code_device\hgsane\sane_option.cpp" />
|
||||||
<ClCompile Include="DlgArea.cpp" />
|
<ClCompile Include="DlgArea.cpp" />
|
||||||
|
<ClCompile Include="DlgCfgMgr.cpp" />
|
||||||
<ClCompile Include="DlgGamma.cpp" />
|
<ClCompile Include="DlgGamma.cpp" />
|
||||||
<ClCompile Include="DlgIndicator.cpp" />
|
<ClCompile Include="DlgIndicator.cpp" />
|
||||||
|
<ClCompile Include="DlgInput.cpp" />
|
||||||
<ClCompile Include="DlgPage.cpp" />
|
<ClCompile Include="DlgPage.cpp" />
|
||||||
<ClCompile Include="DlgSetting.cpp" />
|
<ClCompile Include="DlgSetting.cpp" />
|
||||||
<ClCompile Include="gb_json.cpp" />
|
<ClCompile Include="gb_json.cpp" />
|
||||||
|
@ -223,9 +225,12 @@
|
||||||
<ClInclude Include="..\..\sdk\include\sane\sanei_debug.h" />
|
<ClInclude Include="..\..\sdk\include\sane\sanei_debug.h" />
|
||||||
<ClInclude Include="..\..\sdk\include\sane\sane_ex.h" />
|
<ClInclude Include="..\..\sdk\include\sane\sane_ex.h" />
|
||||||
<ClInclude Include="..\..\sdk\include\sane\sane_option_definitions.h" />
|
<ClInclude Include="..\..\sdk\include\sane\sane_option_definitions.h" />
|
||||||
|
<ClInclude Include="const_str.h" />
|
||||||
<ClInclude Include="DlgArea.h" />
|
<ClInclude Include="DlgArea.h" />
|
||||||
|
<ClInclude Include="DlgCfgMgr.h" />
|
||||||
<ClInclude Include="DlgGamma.h" />
|
<ClInclude Include="DlgGamma.h" />
|
||||||
<ClInclude Include="DlgIndicator.h" />
|
<ClInclude Include="DlgIndicator.h" />
|
||||||
|
<ClInclude Include="DlgInput.h" />
|
||||||
<ClInclude Include="DlgPage.h" />
|
<ClInclude Include="DlgPage.h" />
|
||||||
<ClInclude Include="DlgSetting.h" />
|
<ClInclude Include="DlgSetting.h" />
|
||||||
<ClInclude Include="gb_json.h" />
|
<ClInclude Include="gb_json.h" />
|
||||||
|
|
|
@ -66,6 +66,12 @@
|
||||||
<ClCompile Include="gb_json.cpp">
|
<ClCompile Include="gb_json.cpp">
|
||||||
<Filter>sane2twain\UI</Filter>
|
<Filter>sane2twain\UI</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="DlgCfgMgr.cpp">
|
||||||
|
<Filter>sane2twain\UI</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="DlgInput.cpp">
|
||||||
|
<Filter>sane2twain\UI</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\code_device\hgsane\cJSON.h">
|
<ClInclude Include="..\..\code_device\hgsane\cJSON.h">
|
||||||
|
@ -140,6 +146,15 @@
|
||||||
<ClInclude Include="gb_json.h">
|
<ClInclude Include="gb_json.h">
|
||||||
<Filter>sane2twain\UI</Filter>
|
<Filter>sane2twain\UI</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="DlgCfgMgr.h">
|
||||||
|
<Filter>sane2twain\UI</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="DlgInput.h">
|
||||||
|
<Filter>sane2twain\UI</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="const_str.h">
|
||||||
|
<Filter>sane2twain\UI</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="sane.def">
|
<None Include="sane.def">
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#pragma comment(lib, "Shlwapi.lib")
|
#pragma comment(lib, "Shlwapi.lib")
|
||||||
|
|
||||||
#include "../../code_device/hgsane/sane_hg_mdw.h"
|
#include "../../code_device/hgsane/sane_hg_mdw.h"
|
||||||
|
#include "../../sdk/include/lang/app_language.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ namespace local_trans
|
||||||
delete[] ansi;
|
delete[] ansi;
|
||||||
}
|
}
|
||||||
|
|
||||||
return a;
|
return std::move(a);
|
||||||
}
|
}
|
||||||
std::wstring a2u(const char* asc, UINT cp)
|
std::wstring a2u(const char* asc, UINT cp)
|
||||||
{
|
{
|
||||||
|
@ -49,7 +49,23 @@ namespace local_trans
|
||||||
delete[] buf;
|
delete[] buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
return u;
|
return std::move(u);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wstring lang_trans_between_hz936(const wchar_t* in, bool from_hz)
|
||||||
|
{
|
||||||
|
std::string a(u2a(in, CP_UTF8));
|
||||||
|
|
||||||
|
if (from_hz)
|
||||||
|
a = from_default_language(a.c_str(), nullptr);
|
||||||
|
else
|
||||||
|
a = to_default_language(a.c_str(), nullptr);
|
||||||
|
|
||||||
|
return std::move(a2u(a.c_str(), CP_UTF8));
|
||||||
|
}
|
||||||
|
const char* __stdcall lang_trans_between_hz936(const char* in, bool from_hz, void* param)
|
||||||
|
{
|
||||||
|
return from_hz ? from_default_language(in, nullptr) : to_default_language(in, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -195,4 +195,7 @@ namespace local_trans
|
||||||
{
|
{
|
||||||
std::string u2a(const wchar_t* unic, UINT cp = CP_ACP);
|
std::string u2a(const wchar_t* unic, UINT cp = CP_ACP);
|
||||||
std::wstring a2u(const char* asc, UINT cp = CP_ACP);
|
std::wstring a2u(const char* asc, UINT cp = CP_ACP);
|
||||||
|
|
||||||
|
std::wstring lang_trans_between_hz936(const wchar_t* in, bool from_hz = true);
|
||||||
|
const char* __stdcall lang_trans_between_hz936(const char* in, bool from_hz, void* param);
|
||||||
}
|
}
|
||||||
|
|
249
sane/scanner.cpp
249
sane/scanner.cpp
|
@ -315,6 +315,14 @@ namespace callback
|
||||||
else
|
else
|
||||||
delete t;
|
delete t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* __stdcall language_trans(const char* in, bool from_hz, void* param)
|
||||||
|
{
|
||||||
|
if (from_hz)
|
||||||
|
return from_default_language(in, nullptr);
|
||||||
|
else
|
||||||
|
return to_default_language(in, nullptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -325,7 +333,9 @@ scanner::scanner(SCANNERID id) : handle_(NULL), id_(id), ex_id_(EXTENSION_ID_BAS
|
||||||
, scanner_ev_handler_(NULL), evh_param_(NULL), app_wnd_(NULL), user_cancel_(false)
|
, scanner_ev_handler_(NULL), evh_param_(NULL), app_wnd_(NULL), user_cancel_(false)
|
||||||
, max_img_mem_(1 * 1024)
|
, max_img_mem_(1 * 1024)
|
||||||
{
|
{
|
||||||
cfg_ = new gb::sane_config_schm();
|
cfg_ = new gb::scanner_cfg();
|
||||||
|
cfg_->set_language_transform(&callback::language_trans, NULL);
|
||||||
|
|
||||||
tmp_path_ = local_trans::a2u(hg_sane_middleware::sane_path().c_str());
|
tmp_path_ = local_trans::a2u(hg_sane_middleware::sane_path().c_str());
|
||||||
{
|
{
|
||||||
char* tmp = getenv("LOCALAPPDATA");
|
char* tmp = getenv("LOCALAPPDATA");
|
||||||
|
@ -516,6 +526,10 @@ bool scanner::is_option_float(int sn, void* param)
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
void __stdcall scanner::apply_scheme(gb::sane_config_schm* schm, void* param)
|
||||||
|
{
|
||||||
|
((scanner*)param)->apply_scheme(schm);
|
||||||
|
}
|
||||||
|
|
||||||
// IRef
|
// IRef
|
||||||
COM_API_IMPLEMENT(scanner, long, add_ref(void))
|
COM_API_IMPLEMENT(scanner, long, add_ref(void))
|
||||||
|
@ -538,11 +552,11 @@ void scanner::transport_config_file(void)
|
||||||
pid += scanner_name_.substr(pos + 3);
|
pid += scanner_name_.substr(pos + 3);
|
||||||
if (scanner_name_.find(L"HUAGOSCAN ") != std::wstring::npos)
|
if (scanner_name_.find(L"HUAGOSCAN ") != std::wstring::npos)
|
||||||
{
|
{
|
||||||
old = dlg_base::language_from_hz936(L"\u534E\u9AD8\u626B\u63CF\u4EEA\u2014");
|
old = local_trans::lang_trans_between_hz936(L"\u534E\u9AD8\u626B\u63CF\u4EEA\u2014");
|
||||||
}
|
}
|
||||||
else if (scanner_name_.find(L"LANXUMSCAN ") != std::wstring::npos)
|
else if (scanner_name_.find(L"LANXUMSCAN ") != std::wstring::npos)
|
||||||
{
|
{
|
||||||
old = dlg_base::language_from_hz936(L"\u7ACB\u601D\u8FB0\u626B\u63CF\u4EEA\u2014");
|
old = local_trans::lang_trans_between_hz936(L"\u7ACB\u601D\u8FB0\u626B\u63CF\u4EEA\u2014");
|
||||||
pid += L"S";
|
pid += L"S";
|
||||||
}
|
}
|
||||||
old += pid;
|
old += pid;
|
||||||
|
@ -554,89 +568,48 @@ void scanner::transport_config_file(void)
|
||||||
}
|
}
|
||||||
void scanner::update_config(void)
|
void scanner::update_config(void)
|
||||||
{
|
{
|
||||||
|
gb::sane_config_schm* schm = cfg_->get_scheme();
|
||||||
std::string notice("");
|
std::string notice("");
|
||||||
cfg_->update(&scanner::is_option_float, handle_, &callback::option_title_2_name, ¬ice);
|
|
||||||
if (notice.length())
|
|
||||||
{
|
|
||||||
std::wstring msg(dlg_base::language_from_hz936(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") + L"\r\n\r\n");
|
|
||||||
size_t pos = notice.find("\r\n");
|
|
||||||
|
|
||||||
while (pos != std::string::npos)
|
if (schm)
|
||||||
{
|
{
|
||||||
msg += local_trans::a2u(callback::option_name_2_title(notice.substr(0, pos).c_str()), CP_UTF8) + L"\r\n";
|
//schm->update(&scanner::is_option_float, handle_, &callback::option_title_2_name, ¬ice);
|
||||||
notice.erase(0, pos + 2);
|
//if (notice.length())
|
||||||
pos = notice.find("\r\n");
|
//{
|
||||||
}
|
// std::wstring msg(local_trans::lang_trans_between_hz936(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") + L"\r\n\r\n");
|
||||||
if (!IsWindow(app_wnd_))
|
// size_t pos = notice.find("\r\n");
|
||||||
callback::bring_message_box_topmost(dlg_base::language_from_hz936(L"\u52A0\u8F7D\u914D\u7F6E").c_str());
|
//
|
||||||
MessageBoxW(app_wnd_, msg.c_str(), dlg_base::language_from_hz936(L"\u52A0\u8F7D\u914D\u7F6E").c_str(), MB_OK | MB_ICONINFORMATION);
|
// while (pos != std::string::npos)
|
||||||
|
// {
|
||||||
|
// msg += local_trans::a2u(callback::option_name_2_title(notice.substr(0, pos).c_str()), CP_UTF8) + L"\r\n";
|
||||||
|
// notice.erase(0, pos + 2);
|
||||||
|
// pos = notice.find("\r\n");
|
||||||
|
// }
|
||||||
|
// if (!IsWindow(app_wnd_))
|
||||||
|
// callback::bring_message_box_topmost(local_trans::lang_trans_between_hz936(L"\u52A0\u8F7D\u914D\u7F6E").c_str());
|
||||||
|
// MessageBoxW(app_wnd_, msg.c_str(), local_trans::lang_trans_between_hz936(L"\u52A0\u8F7D\u914D\u7F6E").c_str(), MB_OK | MB_ICONINFORMATION);
|
||||||
|
//}
|
||||||
|
schm->release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void scanner::load_config(const wchar_t* file)
|
void scanner::load_config(const wchar_t* file)
|
||||||
{
|
{
|
||||||
cfg_->load_from_file(local_trans::u2a(file).c_str());
|
cfg_->load_file(local_trans::u2a(file).c_str());
|
||||||
update_config();
|
update_config();
|
||||||
}
|
}
|
||||||
void scanner::save_config(const wchar_t* file)
|
void scanner::save_config(const wchar_t* file)
|
||||||
{
|
{
|
||||||
cfg_->save_to(local_trans::u2a(file).c_str());
|
cfg_->save(local_trans::u2a(file).c_str());
|
||||||
}
|
}
|
||||||
void scanner::apply_config(void)
|
void scanner::apply_config(void)
|
||||||
{
|
{
|
||||||
std::string n(""), v(""), ver(cfg_->get_version());
|
gb::sane_config_schm* schm = cfg_->get_scheme();
|
||||||
|
|
||||||
if (cfg_->first_config(n, v))
|
if (!schm)
|
||||||
{
|
return;
|
||||||
do
|
|
||||||
{
|
|
||||||
int id = cfg_->id_from_name(n.c_str());
|
|
||||||
if (id == -1)
|
|
||||||
{
|
|
||||||
if (gb::sane_config_schm::is_option_data(n))
|
|
||||||
{
|
|
||||||
id = cfg_->id_from_name(n.c_str());
|
|
||||||
if (id == is_custom_gamma_id_)
|
|
||||||
{
|
|
||||||
if (v.length() == sizeof(SANE_Gamma))
|
|
||||||
{
|
|
||||||
unsigned int l = v.length();
|
|
||||||
hg_sane_middleware::instance()->io_control(handle_, IO_CTRL_CODE_SET_CUSTOM_GAMMA, &v[0], &l);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wchar_t info[128] = { 0 };
|
|
||||||
swprintf_s(info, _countof(info) - 1, L"ERROR: custom gamma data length is %u, but we expect %u.\r\n", v.length(), sizeof(SANE_Gamma));
|
|
||||||
log_info(info, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
v = from_default_language(v.c_str(), nullptr);
|
|
||||||
void* data = &v[0];
|
|
||||||
SANE_Fixed fixed = 0;
|
|
||||||
const SANE_Option_Descriptor* desc = hg_sane_middleware::instance()->get_option_descriptor(handle_, (const void*)id);
|
|
||||||
if (desc)
|
|
||||||
{
|
|
||||||
char* buf = NULL;
|
|
||||||
SANE_Int after = 0;
|
|
||||||
|
|
||||||
if (desc->type == SANE_TYPE_STRING)
|
apply_scheme(schm);
|
||||||
{
|
schm->release();
|
||||||
buf = new char[desc->size + 4];
|
|
||||||
memset(buf, 0, desc->size + 4);
|
|
||||||
strcpy(buf, v.c_str());
|
|
||||||
data = buf;
|
|
||||||
}
|
|
||||||
hg_sane_middleware::instance()->set_option(handle_, (const void*)id, SANE_ACTION_SET_VALUE, data, &after);
|
|
||||||
|
|
||||||
if (buf)
|
|
||||||
delete[] buf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (cfg_->next_config(n, v));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
void scanner::on_ui_event(int uev, void* sender)
|
void scanner::on_ui_event(int uev, void* sender)
|
||||||
{
|
{
|
||||||
|
@ -772,8 +745,8 @@ int scanner::open(void)
|
||||||
HWND parent = callback::find_main_wnd();
|
HWND parent = callback::find_main_wnd();
|
||||||
|
|
||||||
if (!IsWindow(parent))
|
if (!IsWindow(parent))
|
||||||
callback::bring_message_box_topmost(dlg_base::language_from_hz936(L"\u6253\u5F00\u5931\u8D25").c_str());
|
callback::bring_message_box_topmost(local_trans::lang_trans_between_hz936(CONST_STRING_OPEN_FAILED).c_str());
|
||||||
MessageBoxW(parent, msg.c_str(), dlg_base::language_from_hz936(L"\u6253\u5F00\u5931\u8D25").c_str(), MB_OK | MB_ICONERROR);
|
MessageBoxW(parent, msg.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_OPEN_FAILED).c_str(), MB_OK | MB_ICONERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -829,10 +802,10 @@ int scanner::init_options_id(void)
|
||||||
if (desc->type == SANE_TYPE_STRING)
|
if (desc->type == SANE_TYPE_STRING)
|
||||||
{
|
{
|
||||||
std::string deflan(to_default_language((char*)val, nullptr));
|
std::string deflan(to_default_language((char*)val, nullptr));
|
||||||
cfg_->set_default_value(op_id, desc->name, &deflan[0], deflan.length());
|
cfg_->set_default_value(op_id, desc->name, desc->title, &deflan[0], deflan.length(), desc->type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cfg_->set_default_value(op_id, desc->name, (char*)val, len);
|
cfg_->set_default_value(op_id, desc->name, desc->title, (char*)val, len, desc->type);
|
||||||
}
|
}
|
||||||
local_utility::free_memory(val);
|
local_utility::free_memory(val);
|
||||||
}
|
}
|
||||||
|
@ -1103,14 +1076,14 @@ bool scanner::get_option_value_with_parent(int sn, set_opt_value setv, void* par
|
||||||
|
|
||||||
memset(buf, 0, parent->size);
|
memset(buf, 0, parent->size);
|
||||||
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)scan_mode_id_, buf);
|
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)scan_mode_id_, buf);
|
||||||
handled = compare_sane_opt(OPTION_VALUE_SMZS_LXSM, buf);
|
handled = compare_sane_opt(local_trans::lang_trans_between_hz936(OPTION_VALUE_SMZS_LXSM, true, nullptr), buf);
|
||||||
delete[] buf;
|
delete[] buf;
|
||||||
if (handled)
|
if (handled)
|
||||||
{
|
{
|
||||||
int count = -1;
|
int count = -1;
|
||||||
value_role role = VAL_ROLE_CURRENT;
|
value_role role = VAL_ROLE_CURRENT;
|
||||||
buf = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)scan_mode_id_);
|
buf = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)scan_mode_id_);
|
||||||
if (compare_sane_opt(OPTION_VALUE_SMZS_LXSM, buf))
|
if (compare_sane_opt(local_trans::lang_trans_between_hz936(OPTION_VALUE_SMZS_LXSM, true, nullptr), buf))
|
||||||
role = value_role(role | VAL_ROLE_DEFAULT);
|
role = value_role(role | VAL_ROLE_DEFAULT);
|
||||||
local_utility::free_memory(buf);
|
local_utility::free_memory(buf);
|
||||||
|
|
||||||
|
@ -1134,17 +1107,17 @@ bool scanner::set_option_value_with_parent(int sn, void* data, int* err) // retu
|
||||||
|
|
||||||
memset(val, 0, parent->size + 4);
|
memset(val, 0, parent->size + 4);
|
||||||
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)scan_mode_id_, val);
|
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)scan_mode_id_, val);
|
||||||
if (compare_sane_opt(OPTION_VALUE_SMZS_LXSM, val))
|
if (compare_sane_opt(local_trans::lang_trans_between_hz936(OPTION_VALUE_SMZS_LXSM, true, nullptr), val))
|
||||||
{
|
{
|
||||||
if (*(int*)data != -1)
|
if (*(int*)data != -1)
|
||||||
{
|
{
|
||||||
strcpy(val, OPTION_VALUE_SMZS_SMZDZS);
|
strcpy(val, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMZS_SMZDZS, true, nullptr));
|
||||||
*err = hg_sane_middleware::instance()->set_option(handle_, (void*)scan_mode_id_, SANE_ACTION_SET_VALUE, val, &after);
|
*err = hg_sane_middleware::instance()->set_option(handle_, (void*)scan_mode_id_, SANE_ACTION_SET_VALUE, val, &after);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (*(int*)data == -1)
|
else if (*(int*)data == -1)
|
||||||
{
|
{
|
||||||
strcpy(val, OPTION_VALUE_SMZS_LXSM);
|
strcpy(val, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMZS_LXSM, true, nullptr));
|
||||||
*err = hg_sane_middleware::instance()->set_option(handle_, (void*)scan_mode_id_, SANE_ACTION_SET_VALUE, val, &after);
|
*err = hg_sane_middleware::instance()->set_option(handle_, (void*)scan_mode_id_, SANE_ACTION_SET_VALUE, val, &after);
|
||||||
}
|
}
|
||||||
delete[] val;
|
delete[] val;
|
||||||
|
@ -1231,6 +1204,69 @@ scanner::EXAPIPOS scanner::find_ex_api(int op_id)
|
||||||
{
|
{
|
||||||
return std::find(ex_opts_.begin(), ex_opts_.end(), op_id);
|
return std::find(ex_opts_.begin(), ex_opts_.end(), op_id);
|
||||||
}
|
}
|
||||||
|
void scanner::apply_scheme(gb::sane_config_schm* schm)
|
||||||
|
{
|
||||||
|
// restore ...
|
||||||
|
hg_sane_middleware::instance()->io_control(handle_, IO_CTRL_CODE_RESTORE_SETTINGS, nullptr, nullptr);
|
||||||
|
|
||||||
|
if (!schm)
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::string n(""), v(""), ver(schm->get_version());
|
||||||
|
|
||||||
|
if (schm->first_config(n, v))
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
int id = schm->id_from_name(n.c_str());
|
||||||
|
if (id == -1)
|
||||||
|
{
|
||||||
|
if (gb::sane_config_schm::is_option_data(n))
|
||||||
|
{
|
||||||
|
id = schm->id_from_name(n.c_str());
|
||||||
|
if (id == is_custom_gamma_id_)
|
||||||
|
{
|
||||||
|
if (v.length() == sizeof(SANE_Gamma))
|
||||||
|
{
|
||||||
|
unsigned int l = v.length();
|
||||||
|
hg_sane_middleware::instance()->io_control(handle_, IO_CTRL_CODE_SET_CUSTOM_GAMMA, &v[0], &l);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wchar_t info[128] = { 0 };
|
||||||
|
swprintf_s(info, _countof(info) - 1, L"ERROR: custom gamma data length is %u, but we expect %u.\r\n", v.length(), sizeof(SANE_Gamma));
|
||||||
|
log_info(info, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
v = from_default_language(v.c_str(), nullptr);
|
||||||
|
void* data = &v[0];
|
||||||
|
SANE_Fixed fixed = 0;
|
||||||
|
const SANE_Option_Descriptor* desc = hg_sane_middleware::instance()->get_option_descriptor(handle_, (const void*)id);
|
||||||
|
if (desc)
|
||||||
|
{
|
||||||
|
char* buf = NULL;
|
||||||
|
SANE_Int after = 0;
|
||||||
|
|
||||||
|
if (desc->type == SANE_TYPE_STRING)
|
||||||
|
{
|
||||||
|
buf = new char[desc->size + 4];
|
||||||
|
memset(buf, 0, desc->size + 4);
|
||||||
|
strcpy(buf, v.c_str());
|
||||||
|
data = buf;
|
||||||
|
}
|
||||||
|
hg_sane_middleware::instance()->set_option(handle_, (const void*)id, SANE_ACTION_SET_VALUE, data, &after);
|
||||||
|
|
||||||
|
if (buf)
|
||||||
|
delete[] buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (schm->next_config(n, v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EX_OPTION_HANDLER_IMPL(multiout)
|
EX_OPTION_HANDLER_IMPL(multiout)
|
||||||
{
|
{
|
||||||
|
@ -1533,7 +1569,7 @@ EX_OPTION_HANDLER_IMPL(paper_lateral)
|
||||||
if (*(bool*)data)
|
if (*(bool*)data)
|
||||||
{
|
{
|
||||||
// set to A4Lateral ...
|
// set to A4Lateral ...
|
||||||
strcpy(buf, OPTION_VALUE_ZZCC_A4HX);
|
strcpy(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_ZZCC_A4HX, true, nullptr));
|
||||||
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
||||||
ret = local_utility::sane_statu_2_scanner_err(ret);
|
ret = local_utility::sane_statu_2_scanner_err(ret);
|
||||||
}
|
}
|
||||||
|
@ -1556,8 +1592,8 @@ EX_OPTION_HANDLER_IMPL(auto_paper_size)
|
||||||
if (setv)
|
if (setv)
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
bool yes = strcmp(buf, OPTION_VALUE_ZZCC_PPYSCC) == 0,
|
bool yes = strcmp(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_ZZCC_PPYSCC, true, nullptr)) == 0,
|
||||||
def = strcmp(init, OPTION_VALUE_ZZCC_PPYSCC) == 0;
|
def = strcmp(init, local_trans::lang_trans_between_hz936(OPTION_VALUE_ZZCC_PPYSCC, true, nullptr)) == 0;
|
||||||
|
|
||||||
local_utility::free_memory(init);
|
local_utility::free_memory(init);
|
||||||
set_cur_and_def_value<bool>(yes, def, setv, data);
|
set_cur_and_def_value<bool>(yes, def, setv, data);
|
||||||
|
@ -1565,7 +1601,7 @@ EX_OPTION_HANDLER_IMPL(auto_paper_size)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SANE_Int after = 0;
|
SANE_Int after = 0;
|
||||||
strcpy(buf, *(bool*)data ? OPTION_VALUE_ZZCC_PPYSCC : OPTION_VALUE_ZZCC_A4);
|
strcpy(buf, *(bool*)data ? local_trans::lang_trans_between_hz936(OPTION_VALUE_ZZCC_PPYSCC, true, nullptr) : local_trans::lang_trans_between_hz936(OPTION_VALUE_ZZCC_A4, true, nullptr));
|
||||||
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
||||||
ret = local_utility::sane_statu_2_scanner_err(ret);
|
ret = local_utility::sane_statu_2_scanner_err(ret);
|
||||||
}
|
}
|
||||||
|
@ -1585,7 +1621,7 @@ EX_OPTION_HANDLER_IMPL(auto_paper_crop)
|
||||||
if (setv)
|
if (setv)
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
bool yes = strcmp(buf, OPTION_VALUE_ZZCC_ZDSMCCZDCQ) == 0,
|
bool yes = strcmp(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_ZZCC_ZDSMCCZDCQ, true, nullptr)) == 0,
|
||||||
def = strcmp(init, OPTION_VALUE_ZZCC_ZDSMCCZDCQ) == 0;
|
def = strcmp(init, OPTION_VALUE_ZZCC_ZDSMCCZDCQ) == 0;
|
||||||
|
|
||||||
local_utility::free_memory(init);
|
local_utility::free_memory(init);
|
||||||
|
@ -1594,7 +1630,7 @@ EX_OPTION_HANDLER_IMPL(auto_paper_crop)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SANE_Int after = 0;
|
SANE_Int after = 0;
|
||||||
strcpy(buf, *(bool*)data ? OPTION_VALUE_ZZCC_ZDSMCCZDCQ : OPTION_VALUE_ZZCC_ZDSMCC);
|
strcpy(buf, *(bool*)data ? local_trans::lang_trans_between_hz936(OPTION_VALUE_ZZCC_ZDSMCCZDCQ, true, nullptr) : local_trans::lang_trans_between_hz936(OPTION_VALUE_ZZCC_ZDSMCC, true, nullptr));
|
||||||
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
||||||
ret = local_utility::sane_statu_2_scanner_err(ret);
|
ret = local_utility::sane_statu_2_scanner_err(ret);
|
||||||
}
|
}
|
||||||
|
@ -1664,12 +1700,12 @@ EX_OPTION_HANDLER_IMPL(duplex)
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
|
|
||||||
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
||||||
set_cur_and_def_value<bool>(strcmp(buf, OPTION_VALUE_SMYM_SM) == 0, strcmp(init, OPTION_VALUE_SMYM_SM) == 0, setv, data);
|
set_cur_and_def_value<bool>(strcmp(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_SM, true, nullptr)) == 0, strcmp(init, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_SM, true, nullptr)) == 0, setv, data);
|
||||||
local_utility::free_memory(init);
|
local_utility::free_memory(init);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strcpy(buf, val ? OPTION_VALUE_SMYM_SM : OPTION_VALUE_SMYM_DM);
|
strcpy(buf, val ? local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_SM, true, nullptr) : local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_DM, true, nullptr));
|
||||||
SANE_Int after = 0;
|
SANE_Int after = 0;
|
||||||
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
||||||
ret = local_utility::sane_statu_2_scanner_err(ret);
|
ret = local_utility::sane_statu_2_scanner_err(ret);
|
||||||
|
@ -1691,13 +1727,13 @@ EX_OPTION_HANDLER_IMPL(fill_background)
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
||||||
val = strcmp(buf, OPTION_VALUE_SMYM_SM) == 0;
|
val = strcmp(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_SM, true, nullptr)) == 0;
|
||||||
set_cur_and_def_value<bool>(strcmp(buf, OPTION_VALUE_BJTCFS_TDBX) == 0, strcmp(init, OPTION_VALUE_BJTCFS_TDBX) == 0, setv, data);
|
set_cur_and_def_value<bool>(strcmp(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_BJTCFS_TDBX, true, nullptr)) == 0, strcmp(init, local_trans::lang_trans_between_hz936(OPTION_VALUE_BJTCFS_TDBX, true, nullptr)) == 0, setv, data);
|
||||||
local_utility::free_memory(init);
|
local_utility::free_memory(init);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strcpy(buf, val ? OPTION_VALUE_BJTCFS_TDBX : OPTION_VALUE_BJTCFS_ADBX);
|
strcpy(buf, val ? local_trans::lang_trans_between_hz936(OPTION_VALUE_BJTCFS_TDBX, true, nullptr) : local_trans::lang_trans_between_hz936(OPTION_VALUE_BJTCFS_ADBX, true, nullptr));
|
||||||
SANE_Int after = 0;
|
SANE_Int after = 0;
|
||||||
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
ret = hg_sane_middleware::instance()->set_option(handle_, (void*)base_id, SANE_ACTION_SET_VALUE, buf, &after);
|
||||||
ret = local_utility::sane_statu_2_scanner_err(ret);
|
ret = local_utility::sane_statu_2_scanner_err(ret);
|
||||||
|
@ -1718,17 +1754,17 @@ EX_OPTION_HANDLER_IMPL(discard_blank_page)
|
||||||
if (setv)
|
if (setv)
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
bool def = strcmp(init, OPTION_VALUE_SMYM_TGKBYTY) == 0;
|
bool def = strcmp(init, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_TGKBYTY, true, nullptr)) == 0;
|
||||||
|
|
||||||
local_utility::free_memory(init);
|
local_utility::free_memory(init);
|
||||||
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
||||||
val = strcmp(buf, OPTION_VALUE_SMYM_TGKBYTY) == 0;
|
val = strcmp(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_TGKBYTY, true, nullptr)) == 0;
|
||||||
set_cur_and_def_value<bool>(val, def, setv, data);
|
set_cur_and_def_value<bool>(val, def, setv, data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (val)
|
if (val)
|
||||||
strcpy(buf, OPTION_VALUE_SMYM_TGKBYTY);
|
strcpy(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_TGKBYTY, true, nullptr));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
|
@ -1755,17 +1791,17 @@ EX_OPTION_HANDLER_IMPL(discard_blank_receipt)
|
||||||
if (setv)
|
if (setv)
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
bool def = strcmp(init, OPTION_VALUE_SMYM_TGKBYFPZ) == 0;
|
bool def = strcmp(init, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_TGKBYFPZ, true, nullptr)) == 0;
|
||||||
|
|
||||||
local_utility::free_memory(init);
|
local_utility::free_memory(init);
|
||||||
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
||||||
val = strcmp(buf, OPTION_VALUE_SMYM_TGKBYFPZ) == 0;
|
val = strcmp(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_TGKBYFPZ, true, nullptr)) == 0;
|
||||||
set_cur_and_def_value<bool>(val, def, setv, data);
|
set_cur_and_def_value<bool>(val, def, setv, data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (val)
|
if (val)
|
||||||
strcpy(buf, OPTION_VALUE_SMYM_TGKBYFPZ);
|
strcpy(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_TGKBYFPZ, true, nullptr));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
|
@ -1792,17 +1828,17 @@ EX_OPTION_HANDLER_IMPL(page_fold)
|
||||||
if (setv)
|
if (setv)
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
bool def = strcmp(init, OPTION_VALUE_SMYM_DZ) == 0;
|
bool def = strcmp(init, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_DZ, true, nullptr)) == 0;
|
||||||
|
|
||||||
local_utility::free_memory(init);
|
local_utility::free_memory(init);
|
||||||
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
hg_sane_middleware::instance()->get_cur_value(handle_, (void*)base_id, buf);
|
||||||
val = strcmp(buf, OPTION_VALUE_SMYM_DZ) == 0;
|
val = strcmp(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_DZ, true, nullptr)) == 0;
|
||||||
set_cur_and_def_value<bool>(val, def, setv, data);
|
set_cur_and_def_value<bool>(val, def, setv, data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (val)
|
if (val)
|
||||||
strcpy(buf, OPTION_VALUE_SMYM_DZ);
|
strcpy(buf, local_trans::lang_trans_between_hz936(OPTION_VALUE_SMYM_DZ, true, nullptr));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
char* init = (char*)hg_sane_middleware::instance()->get_def_value(handle_, (void*)base_id);
|
||||||
|
@ -2255,8 +2291,8 @@ COM_API_IMPLEMENT(scanner, int, start(void))
|
||||||
if (indicator_.get())
|
if (indicator_.get())
|
||||||
indicator_->show(false);
|
indicator_->show(false);
|
||||||
if (!IsWindow(app_wnd_))
|
if (!IsWindow(app_wnd_))
|
||||||
callback::bring_message_box_topmost(dlg_base::language_from_hz936(L"\u542F\u52A8\u5931\u8D25").c_str());
|
callback::bring_message_box_topmost(local_trans::lang_trans_between_hz936(CONST_STRING_START_FAILED).c_str());
|
||||||
MessageBoxW(app_wnd_, msg.c_str(), dlg_base::language_from_hz936(L"\u542F\u52A8\u5931\u8D25").c_str(), MB_OK | MB_ICONERROR);
|
MessageBoxW(app_wnd_, msg.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_START_FAILED).c_str(), MB_OK | MB_ICONERROR);
|
||||||
}
|
}
|
||||||
prev_start_result_ = ret;
|
prev_start_result_ = ret;
|
||||||
is_scanning_ = ret == SANE_STATUS_GOOD;
|
is_scanning_ = ret == SANE_STATUS_GOOD;
|
||||||
|
@ -2708,7 +2744,7 @@ COM_API_IMPLEMENT(scanner, int, twain_get_config(char* buf, size_t* len))
|
||||||
}
|
}
|
||||||
COM_API_IMPLEMENT(scanner, int, twain_set_config(char* buf, size_t len))
|
COM_API_IMPLEMENT(scanner, int, twain_set_config(char* buf, size_t len))
|
||||||
{
|
{
|
||||||
if(cfg_->load_from_mem(buf))
|
if(cfg_->load_mem(buf))
|
||||||
{
|
{
|
||||||
update_config();
|
update_config();
|
||||||
apply_config();
|
apply_config();
|
||||||
|
@ -2756,8 +2792,7 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_setting(HWND parent, bool with_scan, bo
|
||||||
pid = scanner_name_.length();
|
pid = scanner_name_.length();
|
||||||
setting_.reset(new dlg_setting(parent, &api, handle_, with_scan, scanner_name_.substr(0, pid).c_str()));
|
setting_.reset(new dlg_setting(parent, &api, handle_, with_scan, scanner_name_.substr(0, pid).c_str()));
|
||||||
setting_->set_ui_event_notify(&scanner::ui_callback, this);
|
setting_->set_ui_event_notify(&scanner::ui_callback, this);
|
||||||
setting_->set_config(cfg_, (cfg_path_ + scanner_name_.substr(0, pid)).c_str());
|
setting_->set_config(cfg_, (cfg_path_ + scanner_name_.substr(0, pid) + L".cfg").c_str(), &scanner::apply_scheme, this);
|
||||||
cfg_->begin_setting();
|
|
||||||
indicator_.reset();
|
indicator_.reset();
|
||||||
if (indicator)
|
if (indicator)
|
||||||
{
|
{
|
||||||
|
@ -2862,8 +2897,8 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
|
||||||
{
|
{
|
||||||
std::wstring msg(local_trans::a2u((char*)data, CP_UTF8));
|
std::wstring msg(local_trans::a2u((char*)data, CP_UTF8));
|
||||||
if(!IsWindow(app_wnd_))
|
if(!IsWindow(app_wnd_))
|
||||||
callback::bring_message_box_topmost(dlg_base::language_from_hz936(L"\u9519\u8BEF").c_str());
|
callback::bring_message_box_topmost(local_trans::lang_trans_between_hz936(CONST_STRING_ERROR).c_str());
|
||||||
MessageBoxW(app_wnd_, msg.c_str(), dlg_base::language_from_hz936(L"\u9519\u8BEF").c_str(), MB_OK);
|
MessageBoxW(app_wnd_, msg.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_ERROR).c_str(), MB_OK);
|
||||||
}
|
}
|
||||||
on_ui_event(ev_code, (void*)ev_code);
|
on_ui_event(ev_code, (void*)ev_code);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ class dlg_indicator;
|
||||||
class dlg_setting;
|
class dlg_setting;
|
||||||
namespace gb
|
namespace gb
|
||||||
{
|
{
|
||||||
class sane_config_schm;
|
class scanner_cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
class scanner : public ISaneInvoker, virtual public refer
|
class scanner : public ISaneInvoker, virtual public refer
|
||||||
|
@ -53,7 +53,7 @@ class scanner : public ISaneInvoker, virtual public refer
|
||||||
SANE_FinalImgFormat img_fmt_;
|
SANE_FinalImgFormat img_fmt_;
|
||||||
std::unique_ptr<dlg_indicator> indicator_;
|
std::unique_ptr<dlg_indicator> indicator_;
|
||||||
std::unique_ptr<dlg_setting> setting_;
|
std::unique_ptr<dlg_setting> setting_;
|
||||||
gb::sane_config_schm* cfg_;
|
gb::scanner_cfg* cfg_;
|
||||||
|
|
||||||
int(__stdcall* scanner_ev_handler_)(int, void*);
|
int(__stdcall* scanner_ev_handler_)(int, void*);
|
||||||
void* evh_param_;
|
void* evh_param_;
|
||||||
|
@ -99,6 +99,7 @@ class scanner : public ISaneInvoker, virtual public refer
|
||||||
std::vector<EXAPI> ex_opts_;
|
std::vector<EXAPI> ex_opts_;
|
||||||
typedef std::vector<EXAPI>::iterator EXAPIPOS;
|
typedef std::vector<EXAPI>::iterator EXAPIPOS;
|
||||||
EXAPIPOS find_ex_api(int op_id);
|
EXAPIPOS find_ex_api(int op_id);
|
||||||
|
void apply_scheme(gb::sane_config_schm* schm);
|
||||||
;
|
;
|
||||||
EX_OPTION_HANDLER_DECL(multiout);
|
EX_OPTION_HANDLER_DECL(multiout);
|
||||||
EX_OPTION_HANDLER_DECL(auto_color_type);
|
EX_OPTION_HANDLER_DECL(auto_color_type);
|
||||||
|
@ -167,6 +168,7 @@ class scanner : public ISaneInvoker, virtual public refer
|
||||||
static float __stdcall to_float(SANE_Fixed v);
|
static float __stdcall to_float(SANE_Fixed v);
|
||||||
static void __stdcall ui_callback(int uev, void* sender, void* param);
|
static void __stdcall ui_callback(int uev, void* sender, void* param);
|
||||||
static bool is_option_float(int sn, void* param);
|
static bool is_option_float(int sn, void* param);
|
||||||
|
static void __stdcall apply_scheme(gb::sane_config_schm* schm, void* param);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
scanner(SCANNERID id);
|
scanner(SCANNERID id);
|
||||||
|
|
Loading…
Reference in New Issue