📄 pagequerycalc.cpp
字号:
{
double d;
if (m_eValue1.GetValue(d))
{
stats.SetValue1(d);
} else
{
return;
}
}
// Get Operator
index = m_cbOperator.GetCurSel();
if (index != CB_ERR)
{
int nStat = m_cbOperator.GetItemData(index);
stats.SetStatistic(nStat);
// Get Second Attribute
index = m_cbAttr2.GetCurSel();
if (index != CB_ERR)
{
CQueryElement* pElement = (CQueryElement*)m_cbAttr2.GetItemDataPtr(index);
if (pElement != NULL)
{
stats.SetFTypeId2(pElement->GetFTypeId());
stats.SetAttrId2(pElement->GetAttrId());
}
// Value
else
{
double d;
if (m_eValue2.GetValue(d))
{
stats.SetValue2(d);
} else
{
return;
}
}
// Get the number of decimal places
int nDP;
if (m_eDecPlaces.GetValue(nDP, 0, 10))
{
stats.SetDecPlaces(nDP);
} else
{
return;
}
// Get Name
m_eStatsName.GetWindowText(sName);
sName.TrimLeft();
if (sName.GetLength() != 0)
{
stats.SetDesc(sName);
// Add to list
CQueryStats* pStats = new CQueryStats(stats);
pElement = m_pQuery;
while (pElement->GetNextQuery() != NULL)
{
pElement = pElement->GetNextQuery();
}
ASSERT(pElement != NULL);
pElement->SetNextQuery(pStats);
// Update the list
UpdateQueryStats();
} else
{
AfxMessageBox(BDString(IDS_NOCALCNAME));
m_eStatsName.SetFocus();
}
}
}
}
m_bChanged = FALSE;
}
/////////////////////////////////////////////////////////////////////////////
void CPageQueryCalc::OnDelete()
{
int index = m_lbQueryStats.GetCurSel();
if (index != CB_ERR)
{
CQueryStats* pStats = (CQueryStats*)m_lbQueryStats.GetItemDataPtr(index);
// Remove stats from list
m_lbQueryStats.DeleteString(index);
// Remove from query
CQueryElement* pElement = m_pQuery;
while (pElement != NULL)
{
if (pElement->GetNextQuery() == pStats)
{
CQueryElement* pNext = pStats->GetNextQuery();
// Prevent other calculations being deleted
pStats->SetNextQuery(NULL);
delete pStats;
pElement->SetNextQuery(pNext);
break;
}
pElement = pElement->GetNextQuery();
}
}
}
/////////////////////////////////////////////////////////////////////////////
//
// Set a default name
void CPageQueryCalc::OnSelchange()
{
CQueryElement *pElement1 = NULL, *pElement2 = NULL;
int nStat = 0;
CString sName, sStat;
int i;
// Update the operators based on the first attribute
UpdateOperators();
// Retrieve selections
int index = m_cbAttr1.GetCurSel();
if (index != CB_ERR)
{
pElement1 = (CQueryElement*)m_cbAttr1.GetItemDataPtr(index);
// Get Operator
index = m_cbOperator.GetCurSel();
if (index != CB_ERR)
{
nStat = m_cbOperator.GetItemData(index);
// Get Second Attribute
index = m_cbAttr2.GetCurSel();
if (index != CB_ERR && m_cbAttr2.IsWindowEnabled() && m_cbAttr2.GetItemDataPtr(index) != NULL)
{
pElement2 = (CQueryElement*)m_cbAttr2.GetItemDataPtr(index);
}
}
}
// Create name
if (pElement1 != NULL)
{
sName = pElement1->GetDesc();
i = sName.Find('[');
if (i >= 0) sStat = sName.Left(i-1);
else sStat = sName;
if (nStat == CQueryStats::area) sStat += " " + BDString(IDS_AREASQM);
};
if (pElement1 != NULL && pElement2 != NULL)
{
if (nStat == CQueryStats::add) sStat += " + ";
if (nStat == CQueryStats::subtract) sStat += " - ";
if (nStat == CQueryStats::multiply) sStat += " x ";
if (nStat == CQueryStats::divide) sStat += " / ";
if (nStat == CQueryStats::percent) sStat += " % ";
};
if (pElement2 != NULL)
{
sName = pElement2->GetDesc();
i = sName.Find('[');
if (i >= 0) sStat += sName.Left(i);
else sStat += sName;
};
m_eStatsName.SetWindowText(sStat);
m_bChanged = TRUE;
// Enable value control as required
m_eValue1.EnableWindow(m_cbAttr1.GetItemData(m_cbAttr1.GetCurSel()) == NULL);
m_eValue2.EnableWindow(m_cbAttr2.GetItemData(m_cbAttr2.GetCurSel()) == NULL);
}
///////////////////////////////////////////////////////////////////////////////
//
// Set available operators for the currently selected attribute
//
void CPageQueryCalc::UpdateOperators()
{
CQueryElement *pElement1 = NULL;
int nStat = -1;
int index = m_cbAttr1.GetCurSel();
if (index != CB_ERR)
{
pElement1 = (CQueryElement*)m_cbAttr1.GetItemDataPtr(index);
index = m_cbOperator.GetCurSel();
if (index != CB_ERR)
{
nStat = m_cbOperator.GetItemData(index);
};
m_cbOperator.ResetContent();
// Add numeric operators
if (pElement1 == NULL || pElement1->GetDataType() == BDNUMBER)
{
m_cbOperator.AddStringX(BDString(IDS_ADD),CQueryStats::add);
m_cbOperator.AddStringX(BDString(IDS_SUBTRACT),CQueryStats::subtract);
m_cbOperator.AddStringX(BDString(IDS_DIVIDE),CQueryStats::divide);
m_cbOperator.AddStringX(BDString(IDS_MULTIPLY),CQueryStats::multiply);
m_cbOperator.AddStringX(BDString(IDS_PERCENT),CQueryStats::percent);
}
// Add spatial operators
else if (pElement1->GetDataType() == BDMAPLINES)
{
m_cbOperator.AddStringX(BDString(IDS_AREASQM),CQueryStats::area);
}
// Restore previous selection
for (int i = 0; i < m_cbOperator.GetCount(); i++)
{
if ((int)m_cbOperator.GetItemData(i) == nStat) m_cbOperator.SetCurSel(i);
}
if (m_cbOperator.GetCurSel() == CB_ERR) m_cbOperator.SetCurSel(0);
index = m_cbOperator.GetCurSel();
nStat = m_cbOperator.GetItemData(index);
m_cbAttr2.EnableWindow(nStat != CQueryStats::area);
}
}
///////////////////////////////////////////////////////////////////////////////
BOOL CPageQueryCalc::OnKillActive()
{
CString sName;
m_eStatsName.GetWindowText(sName);
sName.TrimRight();
if (m_bChanged)
{
int nRet = AfxMessageBox(BDString(IDS_ADDCALC) + sName + "?", MB_YESNOCANCEL);
if (nRet == IDYES) OnAdd();
else if (nRet == IDCANCEL) return FALSE;
}
m_bChanged = FALSE;
return CPropertyPage::OnKillActive();
}
/////////////////////////////////////////////////////////////////////////////
void CPageQueryCalc::OnOK()
{
*m_pQueryPrev = *m_pQuery;
CPropertyPage::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -