202 lines
5.1 KiB
C++
202 lines
5.1 KiB
C++
// 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_)
|
|
{
|
|
cfg_->rename_scheme(local_trans::u2a(label_.c_str(), CP_UTF8).c_str(), local_trans::u2a(pdisp->item.pszText, CP_UTF8).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();
|
|
}
|