void TPropertyHandler::SetNameValue(TComponent* comp, String prName_Value) { if (prName_Value.LastDelimiter("\r\n")) { // Multi-line string, so call SetNamesValues(): SetNamesValues(comp, prName_Value); return; } String name2, name1, value; // Reads like this: "name2.name1=value". int sep = prName_Value.Pos("="); String names = prName_Value.SubString(1, sep - 1); value = prName_Value.SubString(sep + 1, prName_Value.Length() - sep + 1); sep = names.Pos("."); if (sep) { // Format is "propname.subprop=val": name1 = names.SubString(sep + 1, names.Length() - sep + 1); name2 = names.SubString(1, sep - 1); // name2 is the subcomp of comp. if (!IsPublishedProp(comp, name2)) // No warning. { /* name2 is not a component of comp, but it might be a component of its own, like CheckBox1 is a sub-component of Form1. */ if ((comp = GetSubComponent(comp, name2)) == NULL) return; else { SetPropValue(comp, name1, value); return; } } if (!IsClass(comp, name2)) return; // Get pointer to subObj: TObject *subObj = (TObject *)GetOrdProp(comp, name2); if (subObj == NULL) return; SetPropValue(subObj, name1, value); } else { // Format is "propname=val": SetPropValue(comp, names, value); } }
bool PropertyDataUpdater::ReadDataFromGE( CMFCPropertyGridCtrl* pPropDataList, const AcDbObjectId& objId ) { if( pPropDataList == NULL ) return false; if( objId.isNull() ) return false; //PrintPropList(pPropDataList); // 填充内容 AcTransaction* pTrans = actrTransactionManager->startTransaction(); if( pTrans == 0 ) return false; AcDbObject* pObj; if( Acad::eOk != pTrans->getObject( pObj, objId, AcDb::kForRead ) ) { actrTransactionManager->abortTransaction(); return false; } DataObject* pDO = DataObject::cast( pObj ); if( pDO == 0 ) { actrTransactionManager->abortTransaction(); return false; } //acutPrintf(_T("\n读取数据...")); DataHelperImpl dh( pDO ); int nCount = pPropDataList->GetPropertyCount(); for ( int i = 0; i < nCount; i++ ) { CMFCPropertyGridProperty* pProp = pPropDataList->GetProperty( i ); CString value; dh.getPropertyData( pProp->GetName(), value ); // 更新属性数据 FieldInfo info; // 默认设置(DT_STRING, m_enable=true, m_descr =_T("")) FieldInfoHelper::ReadFieldInfo( pDO->getType(), pProp->GetName(), info ); SetPropValue( pProp, info, value ); // 设置属性值 //DATA_TYPE dt = info.m_dt; //LIST_TYPE lt = info.m_lt; //if (dt == DT_LIST && lt == LT_INT) //{ // //} } actrTransactionManager->endTransaction(); //PrintPropList(pPropDataList); return true; }
STDMETHODIMP CCUBRIDDataSource::Uninitialize(void) { ATLTRACE2(atlTraceDBProvider, 2, "CCUBRIDDataSource::Uninitialize\n"); CComVariant var; // 현재 오류객체를 제거한다. ClearError(); // ATL의 루틴을 호출 { HRESULT hr = IDBInitializeImpl<CCUBRIDDataSource>::Uninitialize(); if(FAILED(hr)) return hr; } var = DBPROPVAL_CS_UNINITIALIZED; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_CONNECTIONSTATUS, &var); return S_OK; }
STDMETHODIMP CCUBRIDDataSource::Initialize(void) { ATLTRACE2(atlTraceDBProvider, 2, "CCUBRIDDataSource::Initialize\n"); // 현재 오류객체를 제거한다. ClearError(); // 연결정보들(ID, 암호등)이 올바른지 확인한다. char dbmsver[16]; { int hConn = 0; //T_CCI_ERROR error; HRESULT hr = Util::Connect(this, &hConn); if(FAILED(hr)) return hr; char buf[16]; T_CCI_ERROR error; int rc = cci_get_db_version(hConn, buf, sizeof(buf)); if(rc<0) { ATLASSERT(rc!=CCI_ER_CON_HANDLE); // rc==CCI_ER_CONNECT -> 주소나 포트가 틀림 // rc==CAS_ER_DBMS -> DB 이름이나 ID, 암호가 틀림 ATLTRACE2(atlTraceDBProvider, 0, "CCUBRIDDataSource::Initialize : cci_get_db_version failed with rc=%d\n", rc); Util::Disconnect(&hConn); CComVariant var; var = DBPROPVAL_CS_COMMUNICATIONFAILURE; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_CONNECTIONSTATUS, &var); return RaiseError(DB_SEC_E_AUTH_FAILED, 0, __uuidof(IDBInitialize), (LPWSTR)0, L"42000"); } //최대 스트링 갯수를 나타내는 데이터베이스 파라메터를 가져온다. rc = cci_get_db_parameter(hConn, CCI_PARAM_MAX_STRING_LENGTH, &PARAM_MAX_STRING_LENGTH, &error); if (rc < 0) { Util::Disconnect(&hConn); CComVariant var; var = DBPROPVAL_CS_COMMUNICATIONFAILURE; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_CONNECTIONSTATUS, &var); return RaiseError(E_FAIL, 0, __uuidof(IDBInitialize), error.err_msg); } Util::Disconnect(&hConn); int a=0, b=0, c=0; sscanf(buf, "%2d.%2d.%2d", &a, &b, &c); sprintf(dbmsver, "%02d.%02d.%04d", a, b, c); } // ATL의 초기화 루틴을 호출 { HRESULT hr = IDBInitializeImpl<CCUBRIDDataSource>::Initialize(); if(FAILED(hr)) return hr; } // set properties { CComVariant var; // 읽기 전용 속성이므로 IDBProperties::SetProperties를 이용할 수 없다. // 대신 내부적으로 IDBProperties에 이용된 CUtlProps::SetPropValue를 사용한다. // 외부적으론 변경할 수 없지만, 내부적으로 변경할 수 있도록 // DBPROPFLAGS_CHANGE flag를 추가한다. var = dbmsver; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_DBMSVER, &var); VariantClear(&var); VariantInit(&var); var = "2.0.01.004"; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_PROVIDERVER, &var); GetPropValue(&DBPROPSET_DBINIT, DBPROP_INIT_LOCATION, &var); SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_DATASOURCENAME, &var); var = DBPROPVAL_CS_INITIALIZED; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_CONNECTIONSTATUS, &var); } return S_OK; }
void CPropertiesWnd::SetUIValue(CMFCPropertyGridProperty* pProp,int nTag) { CControlUI* pControl = m_wndUIProperties.GetCurUI(); if(pControl == NULL) return; int nUpdate=UPDATE_REDRAW_CONTROL; CString strName=pProp->GetName(); strName.MakeLower(); CString strNewVal; CString strOldVal; strNewVal = pProp->FormatProperty(); strOldVal = m_wndUIProperties.FormatOrigProperty(pProp); if(nTag!=tagName && nTag!=tagText && strName.Find(_T("image"))==-1) { strNewVal.MakeLower(); strOldVal.MakeLower(); } switch(nTag) { case tagName: { CPaintManagerUI* pManager = g_pMainFrame->GetActiveUIView()->GetPaintManager(); if(strNewVal.IsEmpty() || pManager->FindControl(strNewVal)) { if(!strNewVal.IsEmpty()) MessageBox(strNewVal + _T(" 名称已被其他控件使用!")); pProp->SetValue((_variant_t)pControl->GetName()); return; } else pManager->ReapObjects(pControl); g_pClassView->RenameUITreeItem(pControl, strNewVal); break; } case tagPos: case tagPadding: SetPropValue(pControl,tagSize); nUpdate=UPDATE_POS; break; case tagSize: case tagMinSize: case tagMaxSize: case tagMinMax: SetUIValue(pProp->GetSubItem(0),-1); SetUIValue(pProp->GetSubItem(1),-1); SetPropValue(pControl,tagPos); nUpdate=UPDATE_POS; break; case tagFloat: case tagColumns: nUpdate=UPDATE_POS; break; case tagVisible: nUpdate=UPDATE_REDRAW_PARENT; break; case tagListHeader: if (strNewVal.Compare(_T("false"))==0) { strNewVal = _T("hidden"); } break; case tagAlpha: { int alpha=_ttoi(strNewVal); if (alpha<0) { strNewVal=_T("0"); pProp->SetValue((_variant_t)(LONG)0); } else { strNewVal=_T("255"); pProp->SetValue((_variant_t)(LONG)255); } break; } } CUIDesignerView* pUIView=g_pMainFrame->GetActiveUIView(); ASSERT(pUIView); TNotifyUI Msg; UIAttribute oldAttrib = {strName, strOldVal}; Msg.pSender=pControl; Msg.sType=_T("PropertyBeginChanged"); Msg.wParam=0; Msg.lParam=(LPARAM)&oldAttrib; pUIView->Notify(Msg); pControl->SetAttribute(strName,strNewVal); pProp->SetOriginalValue(pProp->GetValue()); UIAttribute newAttrib = {strName, strNewVal}; Msg.sType = _T("PropertyEndChanged"); Msg.lParam = (LPARAM)&newAttrib; pUIView->Notify(Msg); if(nTag==tagWindowSize) { Msg.sType=_T("formsize"); Msg.lParam = NULL; pUIView->Notify(Msg); } else if(nTag == tagName) { CPaintManagerUI* pManager = pUIView->GetPaintManager(); pManager->InitControls(pControl); } CControlUI* pParent=pControl->GetParent(); if(pParent==NULL) pParent=pControl; switch(nUpdate) { case UPDATE_POS: pParent->SetPos(pParent->GetPos()); break; case UPDATE_REDRAW_CONTROL: pControl->NeedUpdate(); break; case UPDATE_REDRAW_PARENT: pParent->NeedUpdate(); } }
void TPropertyHandler::SetValue(TComponent* comp, String prName, Variant prValue) { if ((prValue.Type() == varBoolean) && (prValue == -1)) prValue = 1; // Fixes the bug. SetPropValue(comp, prName, prValue); }