增加批量修改某一字段功能
This commit is contained in:
parent
dc45ae8342
commit
9dd97b57a0
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -171,4 +171,5 @@ public:
|
|||
afx_msg void OnBnClickedButtonSet();
|
||||
afx_msg void OnTreeDelitem();
|
||||
afx_msg void OnBnClickedButtonExport();
|
||||
afx_msg void OnTreeModifyallfield();
|
||||
};
|
||||
|
|
|
@ -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: 在此添加控件通知处理程序代码
|
||||
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: 在此添加控件通知处理程序代码
|
||||
std::wstring field(get_item_text(IDC_COMBO_FIELD));
|
||||
|
||||
init_val_api_(field.c_str(), &val_);
|
||||
}
|
||||
|
|
|
@ -4,15 +4,20 @@
|
|||
// CDlgRange 对话框
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
|
||||
#define INIT_VAL_API_PROTO std::function<void(const wchar_t*, CComboBox*)>
|
||||
|
||||
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<std::wstring> 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();
|
||||
};
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue