diff --git a/sane/scanner.cpp b/sane/scanner.cpp index bbec3c7..4f9481f 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -1,4 +1,6 @@ -#include "scanner.h" + + +#include "scanner.h" #include #include // for PathFileExistsW @@ -8,12 +10,13 @@ #include "sane_option_trans.h" #include #include -#include "DlgIndicator.h" + #include "DlgSetting.h" #include "gb_json.h" #include "../../sdk/include/lang/app_language.h" #include - +#include "DlgIndicator.h" +#include "twainui.h" #pragma comment(lib, "Shlwapi.lib") @@ -338,10 +341,13 @@ namespace callback // SANE_EVENT_SCAN_FINISHED - void*: (utf8*)message, flag - error code (0 is success) // SANE_EVENT_USB_DATA_RECEIVED- void* unused, be NULL, flag - unused, be 0 // SANE_EVENT_IMAGE_OK - void* unused, be NULL, flag - unused, be 0 - int (*choose_scanner)(const std::vector& devs) = NULL; // blocked. return selected DEVQUE::id or -1 if user cancelled + int (*choose_scanner)(const std::vector& devs) = NULL; // blocked. return selected DEVQUE::id or -1 if user cancelled void (*apply_current_config)(const char* dev_name, SANE_Handle device, LPSANEAPI api) = NULL; // 应用设备的当前配置 - void (*show_setting_ui)(SANE_Handle device, HWND parent, LPSANEAPI api, bool with_scan/*是否显示“扫描”按钮*/, std::function callback) = NULL; - void (*show_progress_ui)(HWND parent, std::function callback, std::function* notify) = NULL; + void (*show_setting_ui)(SANE_Handle device, HWND parent, LPSANEAPI api, bool with_scan) = NULL; + void (*show_progress_ui)(HWND parent, std::function callback, std::function* notify) = NULL; + + //std::function ui_result_callback; + std::function notify; static void init_ui(void) { std::string root(hg_sane_middleware::sane_path()); @@ -765,7 +771,7 @@ std::string scanner::choose_scanner(const std::vector& scanners) if (scanners.empty()) return ""; - std::vector devs; + std::vector devs; std::string sel(""); int id = 1; @@ -780,7 +786,7 @@ std::string scanner::choose_scanner(const std::vector& scanners) scanner::control_read_string(h, IO_CTRL_CODE_GET_SERIAL, sn); if (sn.length()) { - DEVQUE dev; + DEVQUEUI dev; dev.id = id++; dev.name = scanners[i]; dev.sn = sn; @@ -811,9 +817,9 @@ std::string scanner::choose_scanner(const std::vector& scanners) } else { - dlg_choose_dev dlg(NULL, devs); - dlg.show(true, true); - sel = dlg.get_selected_device(); + //dlg_choose_dev dlg(NULL, devs); + //dlg.show(true, true); + //sel = dlg.get_selected_device(); } return sel; @@ -2898,7 +2904,7 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_setting(HWND parent, bool with_scan, bo { on_ui_event(ev, NULL); }; - callback::show_setting_ui(handle_, parent, &sane_api_, with_scan, cb); + callback::show_setting_ui(handle_, parent, &sane_api_, with_scan); } else if (cfg_) { @@ -2931,6 +2937,13 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_progress(HWND parent)) { if (callback::show_progress_ui) { + auto ui_process = [](ui_result) + { + + }; + + + callback::show_progress_ui(parent, ui_process,&ui_notify); } else { @@ -3021,6 +3034,11 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len) err_ = *len; if (indicator_.get()) indicator_->notify_scan_over((char*)data, *len != SCANNER_ERR_OK); + else if (callback::show_progress_ui) + { + ui_notify(ev_code, data, 0); + on_ui_event(ev_code, (void*)ev_code); + } else { if (*len) @@ -3033,7 +3051,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len) on_ui_event(ev_code, (void*)ev_code); } // is_scanning_ = false; - + { wchar_t msg[128] = { 0 }; swprintf_s(msg, _countof(msg) - 1, L"Scan finished with error: %u\r\n", *len); diff --git a/sane/scanner.h b/sane/scanner.h index 59fab90..e261adb 100644 --- a/sane/scanner.h +++ b/sane/scanner.h @@ -4,6 +4,7 @@ #include #include #include +#include #define SANE_OPTION_ID(name) \ SANE_OPTION_ID_OVERRIDE(name); \ @@ -57,7 +58,7 @@ class scanner : public ISaneInvoker, virtual public refer gb::scanner_cfg* cfg_; bool twain_set_; SANEAPI sane_api_; - + std::function ui_notify; int(__stdcall* scanner_ev_handler_)(int, void*); void* evh_param_; HWND app_wnd_; // for MessageBox