///////////////////////////////////////////////////////////////////////////////////////////////////////////// // 设置条件 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// void SVConditionParam::SetCondition(MAPNODE &alertnode) { string szRelationCount (""); // 条件文本置空 if(m_pConditionArea) m_pConditionArea->setText(""); // 设置帮助文本 if(m_pHelpText) m_pHelpText->setText(m_szHelp); // 设置错误提示信息 if(m_pErrText) m_pErrText->setText(m_szTip); // 得到条件 FindNodeValue(alertnode, svConditionCount, szRelationCount); char szKey [16] = {0}; string szCondition (""), szReturn (""), szParamValue ("") , szRelation (""); int nCount = 0; // 展示条件 if(!szRelationCount.empty()) { nCount = atoi(szRelationCount.c_str()); for(int i = 1; i <= nCount; i++) { szRelation = ""; sprintf(szKey, svRelation, i); FindNodeValue(alertnode, szKey, szRelation); sprintf(szKey, svParamName, i); FindNodeValue(alertnode, szKey, szReturn); sprintf(szKey, svOperate, i); FindNodeValue(alertnode, szKey, szCondition); sprintf(szKey, svParamValue, i); FindNodeValue(alertnode, szKey, szParamValue); getParamLabel(szReturn); if(m_pConditionArea) { string szValue(""); if(!szRelation.empty()) szValue = chLeftBracket + szReturn + " " + szCondition + " " + szParamValue + chRightBracket + " " + szRelation + " "; else szValue = chLeftBracket + szReturn + " " + szCondition + " " + szParamValue + chRightBracket; m_pConditionArea->setText(m_pConditionArea->text() + szValue); } } } }
void SVConditionParam::SetCondition(MAPNODE &alertnode) { string szRelationCount (""); if(m_pConditionArea) m_pConditionArea->setText(""); FindNodeValue(alertnode, "sv_conditioncount", szRelationCount); char szKey [16] = {0}; string szCondition (""), szReturn (""), szParamValue ("") , szRelation (""); int nCount = 0; if(!szRelationCount.empty()) { nCount = atoi(szRelationCount.c_str()); for(int i = 1; i <= nCount; i++) { szRelation = ""; sprintf(szKey, "sv_relation%d", i); FindNodeValue(alertnode, szKey, szRelation); sprintf(szKey, "sv_paramname%d", i); FindNodeValue(alertnode, szKey, szReturn); sprintf(szKey, "sv_operate%d", i); FindNodeValue(alertnode, szKey, szCondition); sprintf(szKey, "sv_paramvalue%d", i); FindNodeValue(alertnode, szKey, szParamValue); getParamLabel(szReturn); if(m_pConditionArea) { string szValue(""); if(!szRelation.empty()) szValue = chLeftBracket + szReturn + " " + szCondition + " " + szParamValue + chRightBracket + " " + szRelation + " "; else szValue = chLeftBracket + szReturn + " " + szCondition + " " + szParamValue + chRightBracket; m_pConditionArea->setText(m_pConditionArea->text() + szValue); } } } }
// determine size of a given cell based on actual font settings CSize CMiniCalendarCtrl::ComputeSize() { const int iXDaysSpaceFromBorder = 15; const int iHeaderSpaceForBorder = 15; const int iHeaderYSpaceForBorder = 3; const int iDaysXSpacing = 5; const int iDaysYSpacing = 2; CSize szReturn(0, 0); int iWidthByDays = 0; int iWidthByDaysOfWeekIndividual = 0; int iWidthByHeader = 0; int iHeaderHeight = 0; int iDaysHeight = 0; int iX; // allocate a DC to use when testing sizes, etc CClientDC* pDC = NULL; if (::IsWindow(GetSafeHwnd())) pDC = new CClientDC(this); else pDC = new CClientDC(AfxGetMainWnd()); ASSERT(pDC); if (!pDC) throw (new CMemoryException()); // get current font and save for later restoration CFont* pOldFont = pDC->GetCurrentFont(); // first, use days to determine width // NOTE: typically, most fonts use the same pixel sizes for all numbers, // but this is not mandatory and many "fancy" fonts change this. To deal // with this, I am calculating the width of all possible dates the control will display pDC->SelectObject(m_pFont); for (iX = 1; iX <= 31; iX++) { CString strTemp = "00"; strTemp += CCalendarUtils::LongToString(iX); strTemp = strTemp.Right(2); CSize szTemp = pDC->GetTextExtent(strTemp); if (szTemp.cx > iWidthByDays) iWidthByDays = szTemp.cx; if (szTemp.cy > iDaysHeight) iDaysHeight = szTemp.cy; } // make sure we also try it with the special days font pDC->SelectObject(m_pFontBold); for (iX = 1; iX <= 31; iX++) { CString strTemp = "00"; strTemp += CCalendarUtils::LongToString(iX); strTemp = strTemp.Right(2); CSize szTemp = pDC->GetTextExtent(strTemp); if (szTemp.cx > iWidthByDays) iWidthByDays = szTemp.cx; if (szTemp.cy > iDaysHeight) iDaysHeight = szTemp.cy; } // finish computation m_iDaysHeight = iDaysHeight; m_iIndividualDayWidth = iWidthByDays; iWidthByDays = (iWidthByDays * 7) + (iDaysXSpacing*6) + (iXDaysSpaceFromBorder*2); iDaysHeight = (iDaysHeight * 6) + (iDaysYSpacing*6); // next use days of week to determine width and height. here again, we test each variant pDC->SelectObject(m_pFont); int iWidthByDaysOfWeek = pDC->GetTextExtent("S").cx; if (pDC->GetTextExtent("M").cx > iWidthByDaysOfWeek) iWidthByDaysOfWeek = pDC->GetTextExtent("M").cx; if (pDC->GetTextExtent("T").cx > iWidthByDaysOfWeek) iWidthByDaysOfWeek = pDC->GetTextExtent("T").cx; if (pDC->GetTextExtent("W").cx > iWidthByDaysOfWeek) iWidthByDaysOfWeek = pDC->GetTextExtent("W").cx; if (pDC->GetTextExtent("F").cx > iWidthByDaysOfWeek) iWidthByDaysOfWeek = pDC->GetTextExtent("F").cx; int iDaysOfWeekHeight = pDC->GetTextExtent("S").cy; if (pDC->GetTextExtent("M").cy > iDaysOfWeekHeight) iDaysOfWeekHeight = pDC->GetTextExtent("M").cy; if (pDC->GetTextExtent("T").cy > iDaysOfWeekHeight) iDaysOfWeekHeight = pDC->GetTextExtent("T").cy; if (pDC->GetTextExtent("W").cy > iDaysOfWeekHeight) iDaysOfWeekHeight = pDC->GetTextExtent("W").cy; if (pDC->GetTextExtent("F").cy > iDaysOfWeekHeight) iDaysOfWeekHeight = pDC->GetTextExtent("F").cy; // finish computation iWidthByDaysOfWeekIndividual = iWidthByDaysOfWeek; iWidthByDaysOfWeek = (iWidthByDaysOfWeek * 7) + (iDaysXSpacing*6) + (iXDaysSpaceFromBorder*2); if (iWidthByDaysOfWeekIndividual > m_iIndividualDayWidth) m_iIndividualDayWidth = iWidthByDaysOfWeekIndividual; m_iDaysOfWeekHeight = iDaysOfWeekHeight; // next compute width and height of header (month name and year) // again, because of font variations we will use a 20 year window and // attempt the calculation with every month name pDC->SelectObject(m_pFontBold); for (int iYear = m_iCurrentYear-10; iYear <= m_iCurrentYear+10; iYear++) { for (int iMonth = 1; iMonth <= 12; iMonth++) { CString strTest = GetMonthName(iMonth); strTest += " "; strTest += CCalendarUtils::LongToString(iYear); if (pDC->GetTextExtent(strTest).cx > iWidthByHeader) iWidthByHeader = pDC->GetTextExtent(strTest).cx; if (pDC->GetTextExtent(strTest).cy > iHeaderHeight) iHeaderHeight = pDC->GetTextExtent(strTest).cy; } } // finish computation iWidthByHeader += (iHeaderSpaceForBorder*2); iHeaderHeight += (iHeaderYSpaceForBorder*2); m_iHeaderHeight = iHeaderHeight; // cleanup DC pDC->SelectObject(pOldFont); // destroy DC delete pDC; // NOW, adjust return size if needed // start with widths (these are easy at this point) int iTotalWidth = iWidthByHeader; if (iWidthByDaysOfWeek > iTotalWidth) iTotalWidth = iWidthByDaysOfWeek; if (iWidthByDays > iTotalWidth) iTotalWidth = iWidthByDays; if (iTotalWidth > szReturn.cx) szReturn.cx = iTotalWidth; // adjust heights int iTotalHeight = iHeaderHeight + iDaysOfWeekHeight + iDaysHeight + 12; if (iTotalHeight > szReturn.cy) szReturn.cy = iTotalHeight; m_szMonthSize = szReturn; m_bSizeComputed = TRUE; return szReturn; }
bool SVConditionParam::SaveCondition(MAPNODE &alertnode) { bool bNoError = true; list<string> lstCondition; list<string> lstParam; list<string> lstOperate; string szValue = m_pConditionArea->text(); if(!szValue.empty()) { unsigned int nResult = getCondition(lstCondition, szValue); nResult = getParam(lstParam, szValue); if(lstCondition.size() != lstParam.size() - 1) { bNoError = false; showErrorMsg(sv_condition_relation_error); return bNoError; } char szCount[4] = {0}, szKey [32] = {0}; int nCount = static_cast<int>(lstCondition.size()); int nIndex = 1; string szExpression (""); if(nCount >= 1) { while(lstCondition.size()) { string szConValue = *(lstCondition.begin()); lstCondition.pop_front(); string szParamCondition = *(lstParam.begin()); lstParam.pop_front(); string szCondition (""), szReturn (""), szParamValue (""); int nPos = getOperatePostion(szParamCondition, m_lsCondition, szCondition); if(nPos > 0) { szReturn = szParamCondition.substr(0, nPos - 1); szParamValue = szParamCondition.substr(nPos + szCondition.length() + 1, szParamCondition.length() - (nPos + szCondition.length() + 1)); } if(! checkParamValue(szReturn, szParamValue)) { bNoError = false; break; } sprintf(szKey, "%d", nIndex); szExpression = szExpression + szKey + "#" + szConValue + "#"; sprintf(szKey, "sv_relation%d", nIndex); if((bNoError = AddNodeAttrib(alertnode, szKey, szConValue))) { sprintf(szKey, "sv_paramname%d", nIndex); if((bNoError = AddNodeAttrib(alertnode, szKey, szReturn))) { sprintf(szKey, "sv_operate%d", nIndex); if((bNoError = AddNodeAttrib(alertnode, szKey, szCondition))) { sprintf(szKey, "sv_paramvalue%d", nIndex); bNoError = AddNodeAttrib(alertnode, szKey, szParamValue); } } } if(!bNoError) break; nIndex ++; } } if(bNoError) { string szParamCondition = *(lstParam.begin()); lstParam.pop_front(); string szCondition (""), szReturn (""), szParamValue (""); int nPos = getOperatePostion(szParamCondition, m_lsCondition, szCondition); if(nPos > 0) { szReturn = szParamCondition.substr(0, nPos - 1); szParamValue = szParamCondition.substr(nPos + szCondition.length() + 1, szParamCondition.length() - (nPos + szCondition.length() + 1)); } if(!checkParamValue(szReturn, szParamValue)) { bNoError = false; } if(bNoError) { sprintf(szKey, "%d", nIndex); szExpression = szExpression + szKey; sprintf(szKey, "sv_paramname%d", nIndex); if((bNoError = AddNodeAttrib(alertnode, szKey, szReturn))) { sprintf(szKey, "sv_operate%d", nIndex); if((bNoError = AddNodeAttrib(alertnode, szKey, szCondition))) { sprintf(szKey, "sv_paramvalue%d", nIndex); if(bNoError = AddNodeAttrib(alertnode, szKey, szParamValue)) { if(bNoError = AddNodeAttrib(alertnode, "sv_expression", szExpression)) { sprintf(szCount, "%d", nCount + 1); bNoError = AddNodeAttrib(alertnode, "sv_conditioncount", szCount); } } } } } } } else { showErrorMsg(sv_condition_is_null); bNoError = false; } return bNoError ; }
bool SVConditionParam::checkCondition(MAPNODE &alertnode) { bool bNoError = true; list<string> lstCondition; list<string> lstParam; list<string> lstOperate; string szValue = m_pConditionArea->text(); if(!szValue.empty()) { unsigned int nResult = getCondition(lstCondition, szValue); nResult = getParam(lstParam, szValue); if(lstCondition.size() != lstParam.size() - 1) { bNoError = false; showErrorMsg(sv_condition_relation_error); return bNoError; } char szCount[4] = {0}, szKey [32] = {0}; int nCount = static_cast<int>(lstCondition.size()); int nIndex = 1; string szExpression (""); if(nCount >= 1) { while(lstCondition.size()) { string szConValue = *(lstCondition.begin()); lstCondition.pop_front(); string szParamCondition = *(lstParam.begin()); lstParam.pop_front(); string szCondition (""), szReturn (""), szParamValue (""); int nPos = getOperatePostion(szParamCondition, m_lsCondition, szCondition); if(nPos > 0 && !szCondition.empty()) { szReturn = szParamCondition.substr(0, nPos - 1); szParamValue = szParamCondition.substr(nPos + szCondition.length() + 1, szParamCondition.length() - (nPos + szCondition.length() + 1)); if(! checkParamValue(szReturn, szParamValue)) { bNoError = false; break; } } else { showErrorMsg(sv_condition_relation_error); bNoError = false; } nIndex ++; } } if(bNoError) { string szParamCondition = *(lstParam.begin()); lstParam.pop_front(); string szCondition (""), szReturn (""), szParamValue (""); int nPos = getOperatePostion(szParamCondition, m_lsCondition, szCondition); if(nPos > 0 && !szCondition.empty()) { szReturn = szParamCondition.substr(0, nPos - 1); szParamValue = szParamCondition.substr(nPos + szCondition.length() + 1, szParamCondition.length() - (nPos + szCondition.length() + 1)); bNoError = checkParamValue(szReturn, szParamValue); } else { showErrorMsg(sv_condition_relation_error); bNoError = false; } } } else { showErrorMsg(sv_condition_is_null); bNoError = false; } if(bNoError) { showHelp(m_bShowHelp); } return bNoError ; }
///////////////////////////////////////////////////////////////////////////////////////////////////////////// // 校验当前填写的条件 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// bool SVConditionParam::checkCondition(MAPNODE &alertnode) { bool bNoError = true; list<string> lstCondition; list<string> lstParam; list<string> lstOperate; if(m_pErrText) m_pErrText->hide(); string szValue = m_pConditionArea->text(); if(!szValue.empty()) { int condition,param; //unsigned int nResult = getCondition(lstCondition, szValue); // nResult = getParam(lstParam, szValue); condition=getCondition(lstCondition, szValue); param= getParam(lstParam, szValue); // if(lstCondition.size() != lstParam.size() - 1) if(condition!=param-1) { bNoError = false; showErrorMsg(sv_condition_relation_error); OutputDebugString("!!!!!!!!!!!!!!!!!!!!!!!!!!lstCondition.size lstParam.size222222222222222222222\n"); char t[200]; OutputDebugString(itoa(condition,t,10)) ; OutputDebugString("\n"); OutputDebugString(itoa(param,t,10)); OutputDebugString("\n"); return bNoError; } char szCount[4] = {0}, szKey [32] = {0}; int nCount = static_cast<int>(lstCondition.size()); int nIndex = 1; string szExpression (""); if(nCount >= 1) { while(lstCondition.size()) { string szConValue = *(lstCondition.begin()); lstCondition.pop_front(); string szParamCondition = *(lstParam.begin()); lstParam.pop_front(); string szCondition (""), szReturn (""), szParamValue (""); int nPos = getOperatePostion(szParamCondition, m_lsCondition, szCondition); if(nPos > 0 && !szCondition.empty()) { szReturn = szParamCondition.substr(0, nPos - 1); szParamValue = szParamCondition.substr(nPos + szCondition.length() + 1, szParamCondition.length() - (nPos + szCondition.length() + 1)); if(! checkParamValue(szReturn, szParamValue)) { bNoError = false; break; } } else { showErrorMsg(sv_condition_relation_error); bNoError = false; OutputDebugString("22222222222222222222222222222222222nPosszCondition empty222222222222222222222222222222"); } nIndex ++; } } if(bNoError) { string szParamCondition = *(lstParam.begin()); lstParam.pop_front(); string szCondition (""), szReturn (""), szParamValue (""); int nPos = getOperatePostion(szParamCondition, m_lsCondition, szCondition); if(nPos > 0 && !szCondition.empty()) { szReturn = szParamCondition.substr(0, nPos - 1); szParamValue = szParamCondition.substr(nPos + szCondition.length() + 1, szParamCondition.length() - (nPos + szCondition.length() + 1)); bNoError = checkParamValue(szReturn, szParamValue); } else { showErrorMsg(sv_condition_relation_error); OutputDebugString("2222222222222222222222222222222222222inifbNoError22222222222222222222222"); bNoError = false; } } } else { showErrorMsg(sv_condition_is_null); bNoError = false; } if(bNoError) { showHelp(m_bShowHelp); } return bNoError ; }