From 46e96bd6e4074bf358b9c963721e96df5c98ff97 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Fri, 3 Mar 2023 15:02:25 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E5=8F=98=E6=9B=B4=E5=AD=98=E5=82=A8BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/DlgCfgMgr.cpp | 9 ++++++++- sane/DlgCfgMgr.h | 2 ++ sane/DlgSetting.cpp | 13 +++++++++++-- twain/twain/huagaods.cpp | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/sane/DlgCfgMgr.cpp b/sane/DlgCfgMgr.cpp index 5b35962..a1b98e6 100644 --- a/sane/DlgCfgMgr.cpp +++ b/sane/DlgCfgMgr.cpp @@ -9,7 +9,7 @@ // CDlgIndicator 对话框 -dlg_cfg_mgr::dlg_cfg_mgr(gb::scanner_cfg* cfg, HWND parent) : cfg_(cfg), dlg_base(parent, IDD_CFG_MGR) +dlg_cfg_mgr::dlg_cfg_mgr(gb::scanner_cfg* cfg, HWND parent) : cfg_(cfg), dlg_base(parent, IDD_CFG_MGR), schm_changed_(false) { create(); @@ -199,10 +199,17 @@ void dlg_cfg_mgr::on_del_selected(void) { 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)); + schm_changed_ = true; +} +bool dlg_cfg_mgr::is_scheme_changed(void) +{ + return schm_changed_; } diff --git a/sane/DlgCfgMgr.h b/sane/DlgCfgMgr.h index 04accf3..6262fce 100644 --- a/sane/DlgCfgMgr.h +++ b/sane/DlgCfgMgr.h @@ -15,6 +15,7 @@ class dlg_cfg_mgr: public dlg_base { gb::scanner_cfg* cfg_; std::wstring label_; + bool schm_changed_; BOOL handle_message(UINT msg, WPARAM wp, LPARAM lp) override; void handle_command(WORD code, WORD id, HANDLE ctrl); @@ -32,4 +33,5 @@ public: ~dlg_cfg_mgr(); public: + bool is_scheme_changed(void); }; diff --git a/sane/DlgSetting.cpp b/sane/DlgSetting.cpp index 645574d..e894500 100644 --- a/sane/DlgSetting.cpp +++ b/sane/DlgSetting.cpp @@ -130,6 +130,7 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl) } n->release(); } + s->end_setting(true); s->release(); } } @@ -143,7 +144,7 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl) gb::sane_config_schm* s = cfg_->get_scheme(); if (s) { - s->end_setting(true); + s->end_setting(false); s->release(); } @@ -180,7 +181,7 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl) gb::sane_config_schm* schm = cfg_->get_scheme(); if (schm) { - schm->end_setting(true); + schm->end_setting(false); schm->release(); } cfg_->select_scheme(nullptr); @@ -195,6 +196,14 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl) { dlg_cfg_mgr dlg(cfg_, hwnd()); dlg.do_modal(hwnd()); + if (dlg.is_scheme_changed()) + { + gb::sane_config_schm* schm = cfg_->get_scheme(); + apply_scheme_(schm, apply_param_); + if (schm) + schm->release(); + refresh_controls(-1); + } } else if (id == IDC_BUTTON_CONFIG_MENU) { diff --git a/twain/twain/huagaods.cpp b/twain/twain/huagaods.cpp index 6c40107..dc24dd0 100644 --- a/twain/twain/huagaods.cpp +++ b/twain/twain/huagaods.cpp @@ -28,6 +28,8 @@ using namespace std::placeholders; extern HMODULE me_; +// WIA COM: IStiUSD & IWiaMiniDrv + //custom define caps enum enum CapTypeEx : unsigned short { CAP_TYPE_EX_FILL_BLACK_BKG = 0x8004, From 6c3f32c5deb83c5f82bee5faf9c387a1772a5380 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Fri, 3 Mar 2023 15:25:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E5=8F=98=E6=9B=B4=E5=AD=98=E5=82=A8BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/DlgCfgMgr.cpp | 3 ++- sane/DlgCfgMgr.h | 2 +- sane/DlgSetting.cpp | 6 +++--- twain/twain/huagaods.cpp | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/sane/DlgCfgMgr.cpp b/sane/DlgCfgMgr.cpp index a1b98e6..5ff5cd0 100644 --- a/sane/DlgCfgMgr.cpp +++ b/sane/DlgCfgMgr.cpp @@ -206,8 +206,9 @@ void dlg_cfg_mgr::on_del_selected(void) void dlg_cfg_mgr::on_del_all(void) { cfg_->remove_all_schemes(); - ListView_DeleteAllItems(get_item(IDC_LIST1)); + 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) { diff --git a/sane/DlgCfgMgr.h b/sane/DlgCfgMgr.h index 6262fce..ef66783 100644 --- a/sane/DlgCfgMgr.h +++ b/sane/DlgCfgMgr.h @@ -15,7 +15,7 @@ class dlg_cfg_mgr: public dlg_base { gb::scanner_cfg* cfg_; std::wstring label_; - bool schm_changed_; + bool schm_changed_; // to notify parent refreshing UI and settings BOOL handle_message(UINT msg, WPARAM wp, LPARAM lp) override; void handle_command(WORD code, WORD id, HANDLE ctrl); diff --git a/sane/DlgSetting.cpp b/sane/DlgSetting.cpp index e894500..ebbae8c 100644 --- a/sane/DlgSetting.cpp +++ b/sane/DlgSetting.cpp @@ -130,7 +130,7 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl) } n->release(); } - s->end_setting(true); + s->end_setting(true); // discard changes in prev-scheme s->release(); } } @@ -144,7 +144,7 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl) gb::sane_config_schm* s = cfg_->get_scheme(); if (s) { - s->end_setting(false); + s->end_setting(false); // save changes s->release(); } @@ -196,7 +196,7 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl) { dlg_cfg_mgr dlg(cfg_, hwnd()); dlg.do_modal(hwnd()); - if (dlg.is_scheme_changed()) + if (dlg.is_scheme_changed()) // refresh settings and UI { gb::sane_config_schm* schm = cfg_->get_scheme(); apply_scheme_(schm, apply_param_); diff --git a/twain/twain/huagaods.cpp b/twain/twain/huagaods.cpp index d05a3df..95c41f0 100644 --- a/twain/twain/huagaods.cpp +++ b/twain/twain/huagaods.cpp @@ -28,7 +28,7 @@ using namespace std::placeholders; extern HMODULE me_; -// WIA COM: IStiUSD & IWiaMiniDrv +// WIA COM: IStiUSD & IWiaMiniDrv //custom define caps enum enum CapTypeEx : unsigned short { From b4dd1c912e792cea3262a4d763e07a91df125892 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Fri, 3 Mar 2023 18:45:35 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8DJSON=E4=B8=BA=E5=8F=B6?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=97=B6=EF=BC=8C=E9=81=8D=E5=8E=86=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/gb_json.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/sane/gb_json.cpp b/sane/gb_json.cpp index 0964150..32d3cbb 100644 --- a/sane/gb_json.cpp +++ b/sane/gb_json.cpp @@ -510,9 +510,9 @@ namespace gb } json* json::first_child(void) { + cur_child_ = 0; if (type_ == VAL_TYPE_OBJECT || type_ == VAL_TYPE_ARRAY) { - cur_child_ = 0; if (arr_val_.size()) { arr_val_[0]->add_ref(); @@ -521,7 +521,10 @@ namespace gb } } - return nullptr; + // leaf node, return self + add_ref(); + + return this; } json* json::next_child(void) { @@ -1597,7 +1600,15 @@ namespace gb jsn_->set_value("ver", ver); } - std::string cont(jsn_->to_string()); + std::string cont(""); + if (jsn_->is_leaf_node()) + { + jsn_->value(cont); + cont.insert(0, "{\"" + jsn_->key() + "\":\""); + cont += "\"}"; + } + else + cont = jsn_->to_string(); if (b64) { gb::base64 b64; From e92e66f2e59596099327eb422e191b7147638d92 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Fri, 3 Mar 2023 19:25:06 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8DJSON=E4=B8=BA=E5=8F=B6?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=97=B6=EF=BC=8C=E9=81=8D=E5=8E=86=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/gb_json.cpp | 53 ++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/sane/gb_json.cpp b/sane/gb_json.cpp index 32d3cbb..a9aa402 100644 --- a/sane/gb_json.cpp +++ b/sane/gb_json.cpp @@ -236,23 +236,23 @@ namespace gb cj = cj->next; } - if (arr_val_.size() == 1 && arr_val_[0]->arr_val_.size() == 0) - { - json* child = arr_val_[0]; - - if (!child->key_.empty()) // array - { - arr_val_.clear(); - type_ = child->type_; - key_ = child->key_; - simple_val_.dval = child->simple_val_.dval; - strval_ = child->strval_; - for (auto& v : child->arr_val_) - arr_val_.push_back(v); - child->arr_val_.clear(); - child->release(); - } - } + //if (arr_val_.size() == 1 && arr_val_[0]->arr_val_.size() == 0) + //{ + // json* child = arr_val_[0]; + // + // if (!child->key_.empty()) // array + // { + // arr_val_.clear(); + // type_ = child->type_; + // key_ = child->key_; + // simple_val_.dval = child->simple_val_.dval; + // strval_ = child->strval_; + // for (auto& v : child->arr_val_) + // arr_val_.push_back(v); + // child->arr_val_.clear(); + // child->release(); + // } + //} if (arr_val_.size()) { @@ -521,10 +521,11 @@ namespace gb } } + return nullptr; // leaf node, return self - add_ref(); + //add_ref(); - return this; + //return this; } json* json::next_child(void) { @@ -1601,13 +1602,13 @@ namespace gb } std::string cont(""); - if (jsn_->is_leaf_node()) - { - jsn_->value(cont); - cont.insert(0, "{\"" + jsn_->key() + "\":\""); - cont += "\"}"; - } - else + //if (jsn_->is_leaf_node()) + //{ + // jsn_->value(cont); + // cont.insert(0, "{\"" + jsn_->key() + "\":\""); + // cont += "\"}"; + //} + //else cont = jsn_->to_string(); if (b64) {