diff --git a/pc/code_twain/sln/hgjson/DlgOptJson.cpp b/pc/code_twain/sln/hgjson/DlgOptJson.cpp index 541b5ed..31cdfd3 100644 --- a/pc/code_twain/sln/hgjson/DlgOptJson.cpp +++ b/pc/code_twain/sln/hgjson/DlgOptJson.cpp @@ -837,6 +837,7 @@ BEGIN_MESSAGE_MAP(CDlgOptJson, CDialogEx) ON_BN_CLICKED(IDC_BUTTON_SET, &CDlgOptJson::OnBnClickedButtonSet) ON_COMMAND(ID_TREE_DELITEM, &CDlgOptJson::OnTreeDelitem) ON_BN_CLICKED(IDC_BUTTON_EXPORT, &CDlgOptJson::OnBnClickedButtonExport) + ON_COMMAND(ID_TREE_MODIFYALLFIELD, &CDlgOptJson::OnTreeModifyallfield) END_MESSAGE_MAP() @@ -1478,3 +1479,150 @@ void CDlgOptJson::OnBnClickedButtonExport() int n = file_util::set_clipboard(cont.c_str(), cont.length() * 2, CF_UNICODETEXT); MessageBox(TEXT("JSON text has set to clipboard already"), std::to_wstring(cont.length()).c_str()); } + + +void CDlgOptJson::OnTreeModifyallfield() +{ + // TODO: 在此添加命令处理程序代码 + // Group;Category;Affect;Version;Position;Readonly;Public;Enabled;Depends; + CDlgRange dlg(CDlgRange::TYPE_FIELDS, this); + + auto init_val = [&](const wchar_t* field, CComboBox* box) -> void + { + std::wstring n(field); + wchar_t text[256] = { 0 }; + int l = 0; + + box->ResetContent(); + box->EnableWindow(); // 0x50010302 + // ::SetWindowLong(box->m_hWnd, GWL_STYLE, (LONG)0x50010302); + if (n == L"Group") + { + for (int i = 0; i < group_.GetCount(); ++i) + { + l = group_.GetLBText(i, text); + text[l] = 0; + box->AddString(text); + } + } + else if (n == L"Category") + { + for (int i = 0; i < cat_.GetCount(); ++i) + { + l = cat_.GetLBText(i, text); + text[l] = 0; + box->AddString(text); + } + } + else if (n == L"Depends") + { + box->AddString(L"none"); + box->SetCurSel(0); + box->EnableWindow(FALSE); + } + else if (n == L"Affect") + { + for (int i = 0; i < affect_.GetCount(); ++i) + { + l = affect_.GetLBText(i, text); + text[l] = 0; + box->AddString(text); + } + } + else if (n == L"Version") + { + box->AddString(L"1"); + box->SetCurSel(0); + } + else if (n == L"Position") + { + box->AddString(L"-1"); + box->SetCurSel(0); + } + else if (n == L"Readonly") + { + box->AddString(L"false"); + box->AddString(L"true"); + //::SetWindowLong(box->m_hWnd, GWL_STYLE, (LONG)0x50010203); + } + else if (n == L"Public") + { + box->AddString(L"false"); + box->AddString(L"true"); + //::SetWindowLong(box->m_hWnd, GWL_STYLE, (LONG)0x50010203); + } + else if (n == L"Enabled") + { + box->AddString(L"false"); + box->AddString(L"true"); + //::SetWindowLong(box->m_hWnd, GWL_STYLE, (LONG)0x50010203); + } + }; + + dlg.set_init_val_api(init_val); + if (dlg.DoModal() == IDOK) + { + std::wstring n(dlg.vals_[0]), + val(dlg.init_); + + if (n == L"Group") + { + for (auto& v : opts_) + v.group = val; + } + else if (n == L"Category") + { + for (auto& v : opts_) + v.category = val; + } + else if (n == L"Depends") + { + for (auto& v : opts_) + v.depend_oper = val; + } + else if (n == L"Affect") + { + for (auto& v : opts_) + v.affect = val; + } + else if (n == L"Version") + { + for (auto& v : opts_) + v.ver = _wtoi(val.c_str()); + } + else if (n == L"Position") + { + for (auto& v : opts_) + v.pos = _wtoi(val.c_str()); + } + else if (n == L"Readonly") + { + for (auto& v : opts_) + v.readonly = val == L"true"; + } + else if (n == L"Public") + { + for (auto& v : opts_) + v.open = val == L"true"; + } + else if (n == L"Enabled") + { + for (auto& v : opts_) + v.enable = val == L"true"; + } + + HTREEITEM sel = tree_.GetSelectedItem(); + if (sel) + { + wchar_t* n = (wchar_t*)tree_.GetItemData(sel); + for (auto& v : opts_) + { + if (v.name == n) + { + to_ui(v); + break; + } + } + } + } +} diff --git a/pc/code_twain/sln/hgjson/DlgOptJson.h b/pc/code_twain/sln/hgjson/DlgOptJson.h index 48a8549..950f0d7 100644 --- a/pc/code_twain/sln/hgjson/DlgOptJson.h +++ b/pc/code_twain/sln/hgjson/DlgOptJson.h @@ -171,4 +171,5 @@ public: afx_msg void OnBnClickedButtonSet(); afx_msg void OnTreeDelitem(); afx_msg void OnBnClickedButtonExport(); + afx_msg void OnTreeModifyallfield(); }; diff --git a/pc/code_twain/sln/hgjson/DlgRange.cpp b/pc/code_twain/sln/hgjson/DlgRange.cpp index cb6dffa..a976fb7 100644 --- a/pc/code_twain/sln/hgjson/DlgRange.cpp +++ b/pc/code_twain/sln/hgjson/DlgRange.cpp @@ -6,14 +6,15 @@ #include "DlgRange.h" #include "afxdialogex.h" +#include "resource.h" // CDlgRange 瀵硅瘽妗 IMPLEMENT_DYNAMIC(CDlgRange, CDialogEx) -CDlgRange::CDlgRange(bool is_lst, CWnd* pParent /*=nullptr*/) +CDlgRange::CDlgRange(int type, CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_RANGE, pParent) - , is_list_(is_lst) + , type_(type) { } @@ -41,6 +42,7 @@ void CDlgRange::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, list_); + DDX_Control(pDX, IDC_COMBO_VAL, val_); } BOOL CDlgRange::OnInitDialog() @@ -53,16 +55,19 @@ BOOL CDlgRange::OnInitDialog() list_.InsertColumn(0, TEXT("Value lists"), 0, 177); list_.InsertColumn(1, TEXT("Default"), 0, 48); - GetDlgItem(IDC_EDIT_VAL)->EnableWindow(is_list_); - list_.EnableWindow(is_list_); - GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(is_list_); + GetDlgItem(IDC_EDIT_VAL)->EnableWindow(type_ == TYPE_LIST); + list_.EnableWindow(type_ == TYPE_LIST); + GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(type_ == TYPE_LIST); - GetDlgItem(IDC_EDIT_FROM)->EnableWindow(!is_list_); - GetDlgItem(IDC_EDIT_TO)->EnableWindow(!is_list_); - GetDlgItem(IDC_EDIT_STEP)->EnableWindow(!is_list_); - GetDlgItem(IDC_EDIT_INIT2)->EnableWindow(!is_list_); + GetDlgItem(IDC_EDIT_FROM)->EnableWindow(type_ == TYPE_RANGE); + GetDlgItem(IDC_EDIT_TO)->EnableWindow(type_ == TYPE_RANGE); + GetDlgItem(IDC_EDIT_STEP)->EnableWindow(type_ == TYPE_RANGE); + GetDlgItem(IDC_EDIT_INIT2)->EnableWindow(type_ == TYPE_RANGE); - if (is_list_) + GetDlgItem(IDC_COMBO_FIELD)->EnableWindow(type_ == TYPE_FIELDS); + val_.EnableWindow(type_ == TYPE_FIELDS); + + if (type_ == TYPE_LIST) { for (auto& v: vals_) { @@ -71,7 +76,7 @@ BOOL CDlgRange::OnInitDialog() list_.SetItemText(ind, 1, L"yes"); } } - else if(vals_.size() == 3) + else if(type_ == TYPE_RANGE && vals_.size() == 3) { SetDlgItemTextW(IDC_EDIT_FROM, vals_[0].c_str()); SetDlgItemTextW(IDC_EDIT_TO, vals_[1].c_str()); @@ -79,6 +84,10 @@ BOOL CDlgRange::OnInitDialog() SetDlgItemTextW(IDC_EDIT_INIT2, init_.c_str()); } + else if (type_ == TYPE_FIELDS) + { + + } return TRUE; // return TRUE unless you set the focus to a control } @@ -87,6 +96,7 @@ BEGIN_MESSAGE_MAP(CDlgRange, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, &CDlgRange::OnBnClickedButton1) ON_BN_CLICKED(IDOK, &CDlgRange::OnBnClickedOk) ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CDlgRange::OnNMDblclkList1) + ON_CBN_SELCHANGE(IDC_COMBO_FIELD, &CDlgRange::OnCbnSelchangeComboField) END_MESSAGE_MAP() @@ -118,7 +128,7 @@ void CDlgRange::OnBnClickedOk() { // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜 vals_.clear(); - if (is_list_) + if (type_ == TYPE_LIST) { if (init_.empty()) { @@ -138,7 +148,7 @@ void CDlgRange::OnBnClickedOk() vals_.push_back(buf); } } - else + else if(type_ == TYPE_RANGE) { std::wstring val(get_item_text(IDC_EDIT_FROM)); @@ -176,6 +186,21 @@ void CDlgRange::OnBnClickedOk() return; } } + else if (type_ == TYPE_FIELDS) + { + std::wstring field(get_item_text(IDC_COMBO_FIELD)); + + vals_.clear(); + vals_.push_back(field); + + init_ = get_item_text(IDC_COMBO_VAL); + if (init_.empty()) + { + MessageBox(TEXT("娌℃湁杈撳叆鏈夋晥鍊"), TEXT("No Value"), MB_OK); + GotoDlgCtrl(GetDlgItem(IDC_COMBO_VAL)); + return; + } + } CDialogEx::OnOK(); } @@ -215,3 +240,12 @@ void CDlgRange::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) } } } + + +void CDlgRange::OnCbnSelchangeComboField() +{ + // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜 + std::wstring field(get_item_text(IDC_COMBO_FIELD)); + + init_val_api_(field.c_str(), &val_); +} diff --git a/pc/code_twain/sln/hgjson/DlgRange.h b/pc/code_twain/sln/hgjson/DlgRange.h index 9fc5ebc..4381bbf 100644 --- a/pc/code_twain/sln/hgjson/DlgRange.h +++ b/pc/code_twain/sln/hgjson/DlgRange.h @@ -4,15 +4,20 @@ // CDlgRange 瀵硅瘽妗 #include #include +#include + +#define INIT_VAL_API_PROTO std::function class CDlgRange : public CDialogEx { DECLARE_DYNAMIC(CDlgRange) + INIT_VAL_API_PROTO init_val_api_; + std::wstring get_item_text(UINT id); public: - CDlgRange(bool is_lst, CWnd* pParent = nullptr); // 鏍囧噯鏋勯犲嚱鏁 + CDlgRange(int type, CWnd* pParent = nullptr); // 鏍囧噯鏋勯犲嚱鏁 virtual ~CDlgRange(); // 瀵硅瘽妗嗘暟鎹 @@ -29,10 +34,19 @@ public: std::vector vals_; std::wstring init_; - bool is_list_; + + enum {TYPE_RANGE, TYPE_LIST, TYPE_FIELDS}; + int type_; // 0 - range; 1 - list; 2 - modify fields + + void set_init_val_api(INIT_VAL_API_PROTO api) + { + init_val_api_ = api; + } afx_msg void OnBnClickedButton1(); CListCtrl list_; afx_msg void OnBnClickedOk(); afx_msg void OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult); + CComboBox val_; + afx_msg void OnCbnSelchangeComboField(); }; diff --git a/pc/code_twain/sln/hgjson/hgjson.rc b/pc/code_twain/sln/hgjson/hgjson.rc index c776e7f..8b4b9ed 100644 Binary files a/pc/code_twain/sln/hgjson/hgjson.rc and b/pc/code_twain/sln/hgjson/hgjson.rc differ diff --git a/pc/code_twain/sln/hgjson/resource.h b/pc/code_twain/sln/hgjson/resource.h index 0342706..f18620e 100644 Binary files a/pc/code_twain/sln/hgjson/resource.h and b/pc/code_twain/sln/hgjson/resource.h differ diff --git a/pc/code_twain/sln/usb_tools/Debug/hgjson.exe b/pc/code_twain/sln/usb_tools/Debug/hgjson.exe index 8299719..b1cc17d 100644 Binary files a/pc/code_twain/sln/usb_tools/Debug/hgjson.exe and b/pc/code_twain/sln/usb_tools/Debug/hgjson.exe differ