void CGldEditorView::LoadClass(CLASS *oclass) { CListCtrl &list = GetListCtrl(); int nColumns = list.GetHeaderCtrl()?list.GetHeaderCtrl()->GetItemCount():0; for (int i=0; i<nColumns; i++) list.DeleteColumn(0); CRect wr; list.GetClientRect(&wr); int nCol=0; int nWid=0; #define W(X) (nWid+=X,X) int Name = list.InsertColumn(nCol++,"Name",LVCFMT_LEFT,W(150),nCol); int Type = list.InsertColumn(nCol++,"Type",LVCFMT_LEFT,W(100),nCol); int Class = list.InsertColumn(nCol++,"Class",LVCFMT_LEFT,W(150),nCol); int Access = list.InsertColumn(nCol++,"Access",LVCFMT_LEFT,W(100),nCol); int Data = list.InsertColumn(nCol++,"Data",LVCFMT_LEFT,wr.Width()-nWid,nCol); #undef W char buffer[1024]=""; int nItem; nItem = list.InsertItem(list.GetItemCount(),"inherit"); list.SetItemText(nItem,Type,"CLASS"); list.SetItemText(nItem,Class,""); list.SetItemText(nItem,Access,"PROTECTED"); list.SetItemText(nItem,Data,oclass->parent?oclass->parent->name:""); nItem = list.InsertItem(list.GetItemCount(),"passconfig"); list.SetItemText(nItem,Type,"set"); list.SetItemText(nItem,Class,""); list.SetItemText(nItem,Access,"PROTECTED"); strcpy(buffer,""); if (oclass->passconfig&PC_PRETOPDOWN) strcat(buffer,"PRETOPDOWN"); if (oclass->passconfig&PC_BOTTOMUP) strcat(buffer,buffer[0]=='\0'?"":"|"),strcat(buffer,"BOTTOMUP"); if (oclass->passconfig&PC_POSTTOPDOWN) strcat(buffer,buffer[0]=='\0'?"":"|"),strcat(buffer,"POSTTOPDOWN"); list.SetItemText(nItem,Data,buffer); nItem = list.InsertItem(list.GetItemCount(),"module"); list.SetItemText(nItem,Type,"MODULE"); list.SetItemText(nItem,Class,""); list.SetItemText(nItem,Access,"PROTECTED"); list.SetItemText(nItem,Data,oclass->module->name); list.InsertItem(list.GetItemCount(),""); PROPERTY *prop; for (prop=class_get_first_property(oclass); prop!=NULL; prop=class_get_next_property(prop)) { nItem = list.InsertItem(list.GetItemCount(),prop->name); list.SetItemText(nItem,Type,class_get_property_typename(prop->ptype)); list.SetItemText(nItem,Class,oclass->name); convert_from_enumeration(buffer,sizeof(buffer),&(prop->access),object_access_property()); list.SetItemText(nItem,Access,buffer); list.SetItemText(nItem,Data,""); } }
void CGldEditorView::LoadObject(OBJECT *obj) { CListCtrl &list = GetListCtrl(); int nColumns = list.GetHeaderCtrl()?list.GetHeaderCtrl()->GetItemCount():0; for (int i=0; i<nColumns; i++) list.DeleteColumn(0); CRect wr; list.GetClientRect(&wr); int nCol=0; int nWid=0; #define W(X) (nWid+=X,X) int Name = list.InsertColumn(nCol++,"Name",LVCFMT_LEFT,W(150),nCol); int Type = list.InsertColumn(nCol++,"Type",LVCFMT_LEFT,W(100),nCol); int Class = list.InsertColumn(nCol++,"Class",LVCFMT_LEFT,W(150),nCol); int Access = list.InsertColumn(nCol++,"Access",LVCFMT_LEFT,W(100),nCol); int Data = list.InsertColumn(nCol++,"Data",LVCFMT_RIGHT,W(100),nCol); int Description = list.InsertColumn(nCol++,"Description",LVCFMT_LEFT,wr.Width()-nWid,nCol); #undef W int nItem; char buffer[1024]=""; CLASS *oclass; PROPERTY *prop; nItem = list.InsertItem(list.GetItemCount(),"clock"); list.SetItemText(nItem,Type,"TIMESTAMP"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PROTECTED"); list.SetItemText(nItem,Data,convert_from_timestamp(obj->clock,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"name"); list.SetItemText(nItem,Type,"OBJECTNAME"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,object_name(obj)); nItem = list.InsertItem(list.GetItemCount(),"id"); list.SetItemText(nItem,Type,"OBJECTNUM"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"REFERENCE"); sprintf(buffer,"%d",obj->id); list.SetItemText(nItem,Data,buffer); nItem = list.InsertItem(list.GetItemCount(),"class"); list.SetItemText(nItem,Type,"CLASSNAME"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"REFERENCE"); list.SetItemText(nItem,Data,obj->oclass->name); nItem = list.InsertItem(list.GetItemCount(),"size"); list.SetItemText(nItem,Type,"OBJECTRANK"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"REFERENCE"); sprintf(buffer,"%d",obj->oclass->size); list.SetItemText(nItem,Data,buffer); nItem = list.InsertItem(list.GetItemCount(),"parent"); list.SetItemText(nItem,Type,"OBJECTNAME"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,object_name(obj->parent)); nItem = list.InsertItem(list.GetItemCount(),"rank"); list.SetItemText(nItem,Type,"OBJECTRANK"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); sprintf(buffer,"%d",obj->rank); list.SetItemText(nItem,Data,buffer); nItem = list.InsertItem(list.GetItemCount(),"in_svc"); list.SetItemText(nItem,Type,"TIMESTAMP"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,convert_from_timestamp(obj->in_svc,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"out_svc"); list.SetItemText(nItem,Type,"TIMESTAMP"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,convert_from_timestamp(obj->out_svc,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"latitude"); list.SetItemText(nItem,Type,"double"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,convert_from_latitude(obj->latitude,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"longitude"); list.SetItemText(nItem,Type,"double"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,convert_from_latitude(obj->longitude,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"flags"); list.SetItemText(nItem,Type,"set"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PROTECTED"); list.SetItemText(nItem,Data,convert_from_set(buffer,sizeof(buffer),&(obj->flags),object_flag_property())?buffer:""); for (oclass=obj->oclass; oclass!=NULL; oclass=oclass->parent) { list.InsertItem(list.GetItemCount(),""); for (prop=class_get_first_property(oclass); prop!=NULL; prop=class_get_next_property(prop)) { nItem = list.InsertItem(list.GetItemCount(),prop->name); list.SetItemText(nItem,Type,class_get_property_typename(prop->ptype)); list.SetItemText(nItem,Class,oclass->name); list.SetItemText(nItem,Access,convert_from_enumeration(buffer,sizeof(buffer),&(prop->access),object_access_property())?buffer:""); list.SetItemText(nItem,Data,object_get_value_by_name(obj,prop->name,buffer,sizeof(buffer))?buffer:"(error)"); list.SetItemText(nItem,Description,prop->description); } }; }
static mxArray *get_object_data(OBJECT *obj) { mxArray *plhs[1]; /* set the standard info */ #define ERROR "(error)" #define NONE "(none)" char *fnames[1024] = {"id","class","parent","rank","clock","latitude","longitude","in_svc","out_svc","flags",NULL}; // }; int nFields = 0; int nData = 0; char value[1024]; PROPERTY *prop; mxArray *pId = mxCreateString(convert_from_object(value,sizeof(value),&obj,NULL)?value:ERROR); mxArray *pClass = mxCreateString(obj->oclass->name); mxArray *pParent = mxCreateString(obj->parent!=NULL&&convert_from_object(value,sizeof(value),&(obj->parent),NULL)?value:NONE); mxArray *pRank = mxCreateNumericMatrix(1,1,mxUINT32_CLASS,mxREAL); mxArray *pClock = mxCreateString(convert_from_timestamp(obj->clock,value,sizeof(value))?value:ERROR); mxArray *pLatitude = mxCreateString(convert_from_latitude(obj->latitude,value,sizeof(value))?value:NONE); mxArray *pLongitude = mxCreateString(convert_from_longitude(obj->longitude,value,sizeof(value))?value:NONE); mxArray *pInSvc = mxCreateString(convert_from_timestamp(obj->in_svc,value,sizeof(value))?value:ERROR); mxArray *pOutSvc = mxCreateString(convert_from_timestamp(obj->out_svc,value,sizeof(value))?value:ERROR); mxArray *pFlags = mxCreateString(convert_from_set(value,sizeof(value),(void*)&obj->flags,object_flag_property())?value:ERROR); *(OBJECTRANK*)mxGetPr(pRank) = obj->rank; /* count the number of header items */ while (fnames[nFields]!=NULL) nFields++; /* count the number of object properties and assign the field names */ for (prop=class_get_first_property(obj->oclass); prop!=NULL; prop=class_get_next_property(prop)) /** @todo don't damage the original fieldname when making it safe for Matlab */ fnames[nFields+nData++] = make_fieldname(prop->name); /* construct the return value */ plhs[0] = mxCreateStructMatrix(1,1,nFields+nData,fnames); /* construct the header fields */ mxSetFieldByNumber(plhs[0],0,0,pId); mxSetFieldByNumber(plhs[0],0,1,pClass); mxSetFieldByNumber(plhs[0],0,2,pParent); mxSetFieldByNumber(plhs[0],0,3,pRank); mxSetFieldByNumber(plhs[0],0,4,pClock); mxSetFieldByNumber(plhs[0],0,5,pLatitude); mxSetFieldByNumber(plhs[0],0,6,pLongitude); mxSetFieldByNumber(plhs[0],0,7,pInSvc); mxSetFieldByNumber(plhs[0],0,8,pOutSvc); mxSetFieldByNumber(plhs[0],0,9,pFlags); /* construct the data fields */ for (prop=class_get_first_property(obj->oclass); prop!=NULL; nFields++,prop=class_get_next_property(prop)) { mxArray *pValue; if (prop->ptype==PT_double) { pValue = mxCreateDoubleMatrix(1,1,mxREAL); *(double*)mxGetPr(pValue) = *object_get_double(obj,prop); } else if (prop->ptype==PT_int32) { pValue = mxCreateDoubleMatrix(1,1,mxREAL); *(double*)mxGetPr(pValue) = (double)*object_get_int32(obj,prop); } else if (prop->ptype==PT_complex) { complex *pData = object_get_complex(obj,prop); pValue = mxCreateDoubleMatrix(1,1,mxCOMPLEX); *(double*)mxGetPr(pValue) = pData->r; *(double*)mxGetPi(pValue) = pData->i; } else { pValue = mxCreateString(object_get_value_by_name(obj,prop->name,value,sizeof(value))?value:ERROR); } mxSetFieldByNumber(plhs[0],0,nFields,pValue); } return plhs[0]; }