// 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), schm_changed_(false) { 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 ? pdisp->item.pszText : L""; } 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 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 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]); schm_changed_ = true; } } } void dlg_cfg_mgr::on_del_all(void) { cfg_->remove_all_schemes(); ListView_DeleteAllItems(get_item(IDC_LIST1)); // clear list schm_changed_ = true; dlg_base::set_item_text(IDC_EDIT1, L""); } bool dlg_cfg_mgr::is_scheme_changed(void) { return schm_changed_; }