void CMetadata::AddToMeta(CString Str) { CValue *pCurPos=&vMeta; int nPoint=Str.ReverseFind('.'); CString csType; if(nPoint>0) { csType=mUpper(Str.Mid(nPoint)); Str=Str.Left(nPoint); } CString csName; int nIndex1=0; int nIndex2=Str.Find("\\",nIndex1); while(nIndex2>0) { csName=Str.Mid(nIndex1,nIndex2-nIndex1); if(pCurPos->GetType()!=TYPE_ARRAY) pCurPos->CreateObject("Структура"); pCurPos=&pCurPos->GetAt(csName); nIndex1=nIndex2+1; nIndex2=Str.Find("\\",nIndex1); } csName=Str.Mid(nIndex1); if(pCurPos->GetType()!=TYPE_ARRAY) pCurPos->CreateObject("Структура"); if(csType!=".ATR")//&&csType!=".INF") { if(pCurPos->GetAt(csName).GetType()!=TYPE_ARRAY) pCurPos->SetAt(csName,CValue()); } else if(csType==".ATR") { CMetaObject *pObj=GetMetaObject(Str,csName,1); if(pObj) { CValue Val; Val.LoadFromString(pObj->csAttr); Val.SetAt(String("#"),1);//признак атрибута pCurPos->SetAt(csName,Val); Val.SetAt("Идентификатор",String(csName)); Val.SetAt("Синоним",String(pObj->csAlias)); Val.SetAt("Комментарий",String(pObj->csComment)); } } }
void CDynControl::CreateMicroForm() { CString csFileName; if(m_csObjName.Find(":")==1||m_csObjName.Left(2)=="\\\\") csFileName=m_csObjName; CValue FormParam; FormParam.CreateObject("Структура");//String("Микроформа"); FormParam.SetAt("Микроформа",m_Property); CMicroForm* pControl = new CMicroForm(); pControl->m_bConfigMode=m_bConfigMode; pControl->m_csObjName=m_csObjName; //eventVal - хранится контекст формы OpenFormExt(m_csObjName,eventVal,FormParam,csFileName,"",0, 0,0,FormParam, pControl,m_pParentWnd); //OpenFormExt(m_csObjName,eventVal,CValue(),csFileName,"",0, 0,0,FormParam, pControl,m_pParentWnd); if(m_bVisible||m_bConfigMode) pControl->ShowWindow(SW_SHOW); m_pWnd = pControl; m_hWnd = pControl->GetSafeHwnd(); pControl->SetDlgCtrlID(m_nID); pControl->SetFont(&m_fontDefault); FillDataArray();//доп. параметры объекта (задаваемые из конфигуратора) }
void CObjectData::SaveData(CValue &Val) { Val.CreateObject("Структура"); Val.SetAt("Тип",String(sType)); if(nLength) Val.SetAt("Длина",nLength); if(nPrec) Val.SetAt("Точность",nPrec); if(nChildImage) Val.SetAt("ChildImage",nChildImage); if(bEdit) Val.SetAt("Edit",1); if(bGroup) Val.SetAt("Group",1); if(nType) Val.SetAt("Type",nType); }
CValue CValueSQL::Method(int iName,CValue **p) { CValue Ret; switch(iName) { case enConnect: { nCurrentConnectionType=MYSQL_CONNECTION; CString HostName=p[0]->GetString(); CString BaseName=p[1]->GetString(); CString UserName=p[2]->GetString(); CString Password=p[3]->GetString(); Ret=DB.Connect(HostName,BaseName,UserName,Password,nCurrentConnectionType); bWasConnect=Ret; break; } case enConnectODBC: case enConnectODBC2: { nCurrentConnectionType=ODBCSQL_CONNECTION; CString HostName=p[0]->GetString(); CString BaseName=p[1]->GetString(); CString UserName=p[2]->GetString(); CString Password=p[3]->GetString(); int n=DB.Connect(HostName,BaseName,UserName,Password,nCurrentConnectionType); if(n==0) { Ret=String(DB.csError); bWasConnect=0; } else { Ret=1; bWasConnect=1; } break; } case enDisconnect: { if(bWasConnect) DB.Reset(); bWasConnect=0; break; } case enQuery: { if(!bWasConnect) Error("Не было соединения с базой данных!"); Ret=DB.Query(p[0]->GetString()); if(DB.bError) { CString Str; Str.Format("%s\nОшибка в запросе:\n%s\n",DB.csError,p[0]->GetString()); OutToDebug("%s",Str); Error(Str.GetBuffer(0)); } break; } case enGetInsertID: { if(!bWasConnect) Error("Не было соединения с базой данных!"); __int64 nRes=DB.GetInsertID(); Ret=nRes; break; } //__________________________________________________________________ //Выборка структуры: case enGetFieldsName://ПолучитьИменаПолей в массив { int nCount=DB.CountFields(); if(nCount>0) { Ret.CreateObject("Массив"); for(int i=0;i<nCount;i++) Ret.SetAt(i+1,String(DB.GetFieldName(i))); } break; } case enCountFields://КоличествоПолей { Ret=DB.CountFields(); break; } //__________________________________________________________________ //Выборка данных: case enGetLine: { Ret=DB.GetLine(); break; } case enGetField: { int n=p[0]->GetNumber(); if(n<1) Error("Недопустимый индекс поля"); Ret=String(DB.GetString(n-1)); break; } case enGetFieldsValue://ПолучитьЗначенияПолей в массив { int nCount=DB.CountFields(); Ret.CreateObject("Массив"); if(nCount>0) { Ret.SetSizeArray(nCount); for(int i=0;i<nCount;i++) { Ret.SetAt(i+1,String(DB.GetString(i))); } } break; } case enIsTableExist://СущестуетТаблица { if(!bWasConnect) Error("Не было соединения с базой данных!"); Ret=DB.IsTableExist(p[0]->GetString()); break; } case enGetAllValues://ПолучитьВсеЗначения в массив структур { int nCount=DB.CountFields(); Ret.CreateObject("Массив"); if(nCount>0) { int n=0; while(DB.GetLine()) { n++; CValue Row; Row.CreateObject("Структура"); for(int i=0;i<nCount;i++) { Row.SetAt(DB.GetFieldName(i),String(DB.GetString(i))); } Ret.SetAt(n,Row); } } break; } case enBeginTrans: Ret=DB.BeginTrans(); break; case enCommitTrans: Ret=DB.CommitTrans(); break; case enRollback: Ret=DB.Rollback(); break; case enGetConnect: Ret=String(DB.GetConnect()); break; } return Ret; }
//запись содержимого формы в строку void CFormEditor::GetWindowText(CString &csText) { if(m_pDialog) { //AllElements.Reset(); AllElements.CreateObject("Структура"); CValue ObjectVal; ObjectVal.CreateObject("Структура"); ObjectVal.SetAt("Идентификатор",String(m_pDialog->m_csName)); ObjectVal.SetAt("Заголовок",String(m_pDialog->m_csValue)); ObjectVal.SetAt("Синоним",String(m_pDialog->csAlias)); ObjectVal.SetAt("Комментарий",String(m_pDialog->csComment)); ObjectVal.SetAt("НеИзменятьРазмер",m_pDialog->bCanResize); ObjectVal.SetAt("Иконка",m_pDialog->m_nIcon); CRect Rect; m_pDialog->GetWindowRect(&Rect); ScreenToClient(&Rect); ObjectVal.SetAt("x1",Rect.left); ObjectVal.SetAt("y1",Rect.top); ObjectVal.SetAt("x2",Rect.right); ObjectVal.SetAt("y2",Rect.bottom); m_pDialog->SaveAllToValue(AllElements); AllElements.SetAt("Форма",ObjectVal); //слои ObjectVal.CreateObject("Массив"); for(int l=0;l<m_Layers.aList.GetSize();l++) { CValue vLayer; vLayer.CreateObject("Структура"); vLayer.SetAt("Name",m_Layers.aList[l].csName); if(m_Layers.aList[l].bVisible) vLayer.SetAt("Visible",m_Layers.aList[l].bVisible); if(l==m_Layers.nCurrentEdit) vLayer.SetAt("Activate",1); ObjectVal.SetAt(l+1,vLayer); } AllElements.SetAt("Слои",ObjectVal); AllElements.SaveToString(csText); } }
void CDynControl::SaveToValue(CValue &ObjectVal) { if(!m_pWnd) return; ObjectVal.SetAt("ТипЭлемента",m_nControlType); ObjectVal.SetAt("Микроформа",String(m_csObjName)); ObjectVal.SetAt("nID",m_nID); ObjectVal.SetAt("Идентификатор",String(m_csName)); ObjectVal.SetAt("Описание",String(m_csDescription)); ObjectVal.SetAt("Заголовок",String(m_csValue)); ObjectVal.SetAt("Положение верт",String(m_csVAllign)); ObjectVal.SetAt("Положение гориз",String(m_csHAllign)); ObjectVal.SetAt("Вниз",m_bAutoSizeDown); ObjectVal.SetAt("Вправо",m_bAutoSizeRight); ObjectVal.SetAt("Слой",m_csLayer); ObjectVal.SetAt("Видимость",m_bVisible); ObjectVal.SetAt("Доступность",m_bEnable); ObjectVal.SetAt("Пропускать при вводе",m_nTabOrder); for(int i=0;i<aDataList.GetSize();i++) { ControlData data=aDataList[i]; int nType=data.nType; if(nType==FUNCTION_DATA||nType==STRING_DATA||nType==LIST_DATA) ObjectVal.SetAt(data.csName,String(data.sData)); else if(nType==INT_DATA||nType==COLOR_DATA) ObjectVal.SetAt(data.csName,data.nData); else if(nType==BOOL_DATA) ObjectVal.SetAt(data.csName,data.bData?1:0); else if(nType==DOUBLE_DATA) ObjectVal.SetAt(data.csName,data.fData); } CRect Rect; m_pWnd->GetWindowRect(Rect); m_pParentWnd->ScreenToClient(Rect); ObjectVal.SetAt("x1",Rect.left); ObjectVal.SetAt("y1",Rect.top); ObjectVal.SetAt("x2",Rect.right); ObjectVal.SetAt("y2",Rect.bottom); if(m_nControlType==ID_DYNBUTTONGRID) if(bWasEdit) { CGridCtrl *pGrid=(CGridCtrl *)m_pWnd; for(int nCol=0;nCol<pGrid->GetColumnCount();nCol++) { CValue Val; Val.CreateObject("Структура"); CGridCell* pCell = (CGridCell*)pGrid->GetCell(0, nCol); if (pCell) { Val.SetAt("Идентификатор",String(pGrid->aColumns[nCol].csName)); Val.SetAt("Описание",String(pGrid->aColumns[nCol].csDescription)); Val.SetAt("Заголовок",String(pCell->TextData())); Val.SetAt("Формула",String(pGrid->aColumns[nCol].csFormule)); Val.SetAt("Тип значения",String(pGrid->aColumns[nCol].csType)); Val.SetAt("Длина",pGrid->aColumns[nCol].nLength); Val.SetAt("Точность",pGrid->aColumns[nCol].nPrec); Val.SetAt("Видимость",pGrid->aColumns[nCol].bVisible); Val.SetAt("Доступность",pGrid->aColumns[nCol].bEnable); Val.SetAt("Пропускать при вводе",pGrid->aColumns[nCol].bTab); Val.SetAt("Ширина колонки",pGrid->aColumns[nCol].nColumnWidth); } ObjectVal.SetAt(nCol+1,Val); } ObjectVal.SetAt("WasEdit",1); ObjectVal.SetAt("Число колонок",pGrid->GetColumnCount()); } }