Skip to content

Commit

Permalink
Fix property 204 bug: #31
Browse files Browse the repository at this point in the history
  • Loading branch information
daidodo committed Aug 31, 2022
1 parent 7b7f30a commit be45eb5
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 25 deletions.
12 changes: 6 additions & 6 deletions Diablo Edit2/DlgFoundry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -906,7 +906,7 @@ void CDlgFoundry::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult) {
*pResult = 0;
}

int CDlgFoundry::GatherParamaters(const CPropertyMetaData & meta) const {
pair<BOOL, DWORD> CDlgFoundry::GatherParamaters(const CPropertyMetaData & meta) const {
vector<int> ret;
for (UINT i = 0; i < size(m_edParam); ++i) {
auto & ed = m_edParam[i];
Expand All @@ -917,7 +917,7 @@ int CDlgFoundry::GatherParamaters(const CPropertyMetaData & meta) const {
auto & cb = m_cbParam[i];
const int sel = cb.GetCurSel();
if (sel < 0 || cb.GetCount() <= sel)
return -1;
return make_pair(FALSE, 0);
ret.push_back(cb.GetItemData(sel)); //用Item Data作为值
}
}
Expand Down Expand Up @@ -948,12 +948,12 @@ void CDlgFoundry::OnEnChangeParam() {
const auto code = pp[idx].first;
auto & meta = ::theApp.PropertyMetaData(code);
//update value
const int v = GatherParamaters(meta);
if (v < 0)
const auto v = GatherParamaters(meta);
if (!v.first)
return;
pp[idx].second = v;
pp[idx].second = v.second;
//update desc
m_lstProperty.SetItemText(it, 1, ::theApp.PropertyDescription(code, v));
m_lstProperty.SetItemText(it, 1, ::theApp.PropertyDescription(code, v.second));
//extend sockets
if (194 == code) {
m_sExtSockets = CSFormat(_T("%d"), ExtendSockets());
Expand Down
2 changes: 1 addition & 1 deletion Diablo Edit2/DlgFoundry.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class CDlgFoundry : public CDialogEx
void SetupParamTime(UINT idx, BOOL enabled, int value); //设置时间选择控件
void SetupParamListGeneric(UINT idx, BOOL enabled, int value, std::function<int(CComboBox &)> setup); //设置下拉框参数控件,通用版本
void SetupParamValueFrom(UINT idx, BOOL enabled, const std::vector<CPropParam> & param); //设置后续数值控件
int GatherParamaters(const CPropertyMetaData & meta) const; //收集参数控件的值,得到属性的参数
std::pair<BOOL, DWORD> GatherParamaters(const CPropertyMetaData & meta) const; //收集参数控件的值,得到属性的参数
int ExtendSockets() const; //所有属性列表里扩展孔的总数

// 对话框数据
Expand Down
27 changes: 13 additions & 14 deletions Diablo Edit2/MetaData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const CPropertyField & CPropertyField::Normalze() {

//class CPropertyMetaData

CPropertyMetaData::CPropertyMetaData(const vector<CPropertyField> & fields, int def)
CPropertyMetaData::CPropertyMetaData(const vector<CPropertyField> & fields, DWORD def)
: fields_(fields)
, def_(def)
{
Expand All @@ -27,10 +27,10 @@ CPropertyMetaData::CPropertyMetaData(const vector<CPropertyField> & fields, int
vector<int> CPropertyMetaData::Parse(DWORD value) const {
vector<int> ret;
for (auto & f : fields_) {
ret.push_back((value & ((DWORD(1) << f.bits) - 1)) + f.base);
ret.push_back((value & f.max) + f.base);
value >>= f.bits;
}
return move(ret);
return ret;
}

vector<tuple<int, int, int>> CPropertyMetaData::GetParams(DWORD value) const {
Expand All @@ -41,22 +41,21 @@ vector<tuple<int, int, int>> CPropertyMetaData::GetParams(DWORD value) const {
ret.emplace_back(value & ((DWORD(1) << f.bits) - 1), f.min, f.max);
value >>= f.bits;
}
return move(ret);
return ret;
}

int CPropertyMetaData::GetValue(const std::vector<int> & params) const {
int r = 0, i = -1, s = 0;
pair<BOOL, DWORD> CPropertyMetaData::GetValue(const std::vector<int> & params) const {
int i = 0, s = 0;
DWORD r = 0;
for (auto & f : fields_) {
if (f.bits < 1)
break;
if(++i >= int(params.size()))
return -1;
if (params[i] < f.min || f.max < params[i])
return -1;
r += params[i] << s;
DWORD v = i < int(params.size()) ? params[i] : 0;
if (int(v) < f.min || f.max < int(v))
return make_pair(FALSE, 0);
r += v << s;
s += f.bits;
++i;
}
return r;
return make_pair(TRUE, r);
}

//CSFormat
Expand Down
8 changes: 4 additions & 4 deletions Diablo Edit2/MetaData.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,16 @@ struct CPropertyField
class CPropertyMetaData
{
std::vector<CPropertyField> fields_;
int def_ = 0;
DWORD def_ = 0;
int bitsSum_ = 0;
public:
CPropertyMetaData() {}
CPropertyMetaData(const std::vector<CPropertyField> & fields, int def);
CPropertyMetaData(const std::vector<CPropertyField> & fields, DWORD def);
int Bits() const { return bitsSum_; }
std::vector<int> Parse(DWORD value) const;
std::vector<std::tuple<int, int, int>> GetParams(DWORD value) const;
int GetValue(const std::vector<int> & params) const;
int DefaultValue() const { return def_; }
std::pair<BOOL, DWORD> GetValue(const std::vector<int> & params) const;
DWORD DefaultValue() const { return def_; }
};

CString CSFormat(LPCTSTR lpszFormat, ...);

0 comments on commit be45eb5

Please sign in to comment.