增加批量修改某一字段功能

This commit is contained in:
gb 2023-05-06 11:44:36 +08:00
parent dc45ae8342
commit 9dd97b57a0
7 changed files with 212 additions and 15 deletions

View File

@ -837,6 +837,7 @@ BEGIN_MESSAGE_MAP(CDlgOptJson, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON_SET, &CDlgOptJson::OnBnClickedButtonSet) ON_BN_CLICKED(IDC_BUTTON_SET, &CDlgOptJson::OnBnClickedButtonSet)
ON_COMMAND(ID_TREE_DELITEM, &CDlgOptJson::OnTreeDelitem) ON_COMMAND(ID_TREE_DELITEM, &CDlgOptJson::OnTreeDelitem)
ON_BN_CLICKED(IDC_BUTTON_EXPORT, &CDlgOptJson::OnBnClickedButtonExport) ON_BN_CLICKED(IDC_BUTTON_EXPORT, &CDlgOptJson::OnBnClickedButtonExport)
ON_COMMAND(ID_TREE_MODIFYALLFIELD, &CDlgOptJson::OnTreeModifyallfield)
END_MESSAGE_MAP() END_MESSAGE_MAP()
@ -1478,3 +1479,150 @@ void CDlgOptJson::OnBnClickedButtonExport()
int n = file_util::set_clipboard(cont.c_str(), cont.length() * 2, CF_UNICODETEXT); 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()); 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;
}
}
}
}
}

View File

@ -171,4 +171,5 @@ public:
afx_msg void OnBnClickedButtonSet(); afx_msg void OnBnClickedButtonSet();
afx_msg void OnTreeDelitem(); afx_msg void OnTreeDelitem();
afx_msg void OnBnClickedButtonExport(); afx_msg void OnBnClickedButtonExport();
afx_msg void OnTreeModifyallfield();
}; };

View File

@ -6,14 +6,15 @@
#include "DlgRange.h" #include "DlgRange.h"
#include "afxdialogex.h" #include "afxdialogex.h"
#include "resource.h"
// CDlgRange 对话框 // CDlgRange 对话框
IMPLEMENT_DYNAMIC(CDlgRange, CDialogEx) IMPLEMENT_DYNAMIC(CDlgRange, CDialogEx)
CDlgRange::CDlgRange(bool is_lst, CWnd* pParent /*=nullptr*/) CDlgRange::CDlgRange(int type, CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_RANGE, pParent) : CDialogEx(IDD_RANGE, pParent)
, is_list_(is_lst) , type_(type)
{ {
} }
@ -41,6 +42,7 @@ void CDlgRange::DoDataExchange(CDataExchange* pDX)
{ {
CDialogEx::DoDataExchange(pDX); CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, list_); DDX_Control(pDX, IDC_LIST1, list_);
DDX_Control(pDX, IDC_COMBO_VAL, val_);
} }
BOOL CDlgRange::OnInitDialog() BOOL CDlgRange::OnInitDialog()
@ -53,16 +55,19 @@ BOOL CDlgRange::OnInitDialog()
list_.InsertColumn(0, TEXT("Value lists"), 0, 177); list_.InsertColumn(0, TEXT("Value lists"), 0, 177);
list_.InsertColumn(1, TEXT("Default"), 0, 48); list_.InsertColumn(1, TEXT("Default"), 0, 48);
GetDlgItem(IDC_EDIT_VAL)->EnableWindow(is_list_); GetDlgItem(IDC_EDIT_VAL)->EnableWindow(type_ == TYPE_LIST);
list_.EnableWindow(is_list_); list_.EnableWindow(type_ == TYPE_LIST);
GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(is_list_); GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(type_ == TYPE_LIST);
GetDlgItem(IDC_EDIT_FROM)->EnableWindow(!is_list_); GetDlgItem(IDC_EDIT_FROM)->EnableWindow(type_ == TYPE_RANGE);
GetDlgItem(IDC_EDIT_TO)->EnableWindow(!is_list_); GetDlgItem(IDC_EDIT_TO)->EnableWindow(type_ == TYPE_RANGE);
GetDlgItem(IDC_EDIT_STEP)->EnableWindow(!is_list_); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(type_ == TYPE_RANGE);
GetDlgItem(IDC_EDIT_INIT2)->EnableWindow(!is_list_); 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_) for (auto& v: vals_)
{ {
@ -71,7 +76,7 @@ BOOL CDlgRange::OnInitDialog()
list_.SetItemText(ind, 1, L"yes"); 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_FROM, vals_[0].c_str());
SetDlgItemTextW(IDC_EDIT_TO, vals_[1].c_str()); SetDlgItemTextW(IDC_EDIT_TO, vals_[1].c_str());
@ -79,6 +84,10 @@ BOOL CDlgRange::OnInitDialog()
SetDlgItemTextW(IDC_EDIT_INIT2, init_.c_str()); SetDlgItemTextW(IDC_EDIT_INIT2, init_.c_str());
} }
else if (type_ == TYPE_FIELDS)
{
}
return TRUE; // return TRUE unless you set the focus to a control 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(IDC_BUTTON1, &CDlgRange::OnBnClickedButton1)
ON_BN_CLICKED(IDOK, &CDlgRange::OnBnClickedOk) ON_BN_CLICKED(IDOK, &CDlgRange::OnBnClickedOk)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CDlgRange::OnNMDblclkList1) ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CDlgRange::OnNMDblclkList1)
ON_CBN_SELCHANGE(IDC_COMBO_FIELD, &CDlgRange::OnCbnSelchangeComboField)
END_MESSAGE_MAP() END_MESSAGE_MAP()
@ -118,7 +128,7 @@ void CDlgRange::OnBnClickedOk()
{ {
// TODO: 在此添加控件通知处理程序代码 // TODO: 在此添加控件通知处理程序代码
vals_.clear(); vals_.clear();
if (is_list_) if (type_ == TYPE_LIST)
{ {
if (init_.empty()) if (init_.empty())
{ {
@ -138,7 +148,7 @@ void CDlgRange::OnBnClickedOk()
vals_.push_back(buf); vals_.push_back(buf);
} }
} }
else else if(type_ == TYPE_RANGE)
{ {
std::wstring val(get_item_text(IDC_EDIT_FROM)); std::wstring val(get_item_text(IDC_EDIT_FROM));
@ -176,6 +186,21 @@ void CDlgRange::OnBnClickedOk()
return; 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(); CDialogEx::OnOK();
} }
@ -215,3 +240,12 @@ void CDlgRange::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
} }
} }
} }
void CDlgRange::OnCbnSelchangeComboField()
{
// TODO: 在此添加控件通知处理程序代码
std::wstring field(get_item_text(IDC_COMBO_FIELD));
init_val_api_(field.c_str(), &val_);
}

View File

@ -4,15 +4,20 @@
// CDlgRange 对话框 // CDlgRange 对话框
#include <string> #include <string>
#include <vector> #include <vector>
#include <functional>
#define INIT_VAL_API_PROTO std::function<void(const wchar_t*, CComboBox*)>
class CDlgRange : public CDialogEx class CDlgRange : public CDialogEx
{ {
DECLARE_DYNAMIC(CDlgRange) DECLARE_DYNAMIC(CDlgRange)
INIT_VAL_API_PROTO init_val_api_;
std::wstring get_item_text(UINT id); std::wstring get_item_text(UINT id);
public: public:
CDlgRange(bool is_lst, CWnd* pParent = nullptr); // 标准构造函数 CDlgRange(int type, CWnd* pParent = nullptr); // 标准构造函数
virtual ~CDlgRange(); virtual ~CDlgRange();
// 对话框数据 // 对话框数据
@ -29,10 +34,19 @@ public:
std::vector<std::wstring> vals_; std::vector<std::wstring> vals_;
std::wstring init_; 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(); afx_msg void OnBnClickedButton1();
CListCtrl list_; CListCtrl list_;
afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedOk();
afx_msg void OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult);
CComboBox val_;
afx_msg void OnCbnSelchangeComboField();
}; };

Binary file not shown.

Binary file not shown.