/*---------------------------------------------------------------------------------------------- Return the text string that gets shown to the user when this object needs to be displayed. This is the method for displaying the name of a single reference. This view shows the name for an RnGenericRec consisting of the type of record, hyphen, title, hyphen, creation date. "Subevent - Fishing for pirana - 3/22/2001" @param pguid Pointer to a database object's assigned GUID. @param pptss Address of a pointer to an ITsString COM object used for returning the text string. @return S_OK, E_POINTER, or E_FAIL. ----------------------------------------------------------------------------------------------*/ STDMETHODIMP CleRecVc::GetStrForGuid(BSTR bstrGuid, ITsString ** pptss) { Assert(false); // rework BEGIN_COM_METHOD; ChkComBstrArg(bstrGuid); ChkComOutPtr(pptss); if (BstrLen(bstrGuid) != 8) ReturnHr(E_INVALIDARG); CleMainWnd * pcmw = dynamic_cast<CleMainWnd *>(AfApp::Papp()->GetCurMainWnd()); AssertPtr(pcmw); CleLpInfo * plpi = dynamic_cast<CleLpInfo *>(pcmw->GetLpInfo()); AssertPtr(plpi); HVO hvo = plpi->GetDbInfo()->GetIdFromGuid((GUID *)bstrGuid); CustViewDaPtr qcvd; plpi->GetDataAccess(&qcvd); AssertPtr(qcvd); int clid; HVO hvoOwn; int64 ntim; ITsStringPtr qtssTitle; CheckHr(qcvd->get_IntProp(hvo, kflidCmObject_Class, &clid)); CheckHr(qcvd->get_ObjectProp(hvo, kflidCmObject_Owner, &hvoOwn)); // REVIEW KenZ(RandyR) Whey are DN flids in this app? CheckHr(qcvd->get_TimeProp(hvo, kflidRnGenericRec_DateCreated, &ntim)); CheckHr(qcvd->get_StringProp(hvo, kflidRnGenericRec_Title, &qtssTitle)); int stid; // REVIEW KenZ(RandyR) Whey are DN flids in this app? if (clid == kclidRnEvent) { if (pcmw->GetRootObj() == hvoOwn) stid = kstidEvent; else stid = kstidSubevent; } else if (clid == kclidRnAnalysis) { if (pcmw->GetRootObj() == hvoOwn) stid = kstidAnalysis; else stid = kstidSubanalysis; } StrUni stu(stid); StrUni stuSep(kstidSpHyphenSp); ITsStrFactoryPtr qtsf; ITsIncStrBldrPtr qtisb; qtsf.CreateInstance(CLSID_TsStrFactory); CheckHr(qtsf->GetIncBldr(&qtisb)); CheckHr(qtisb->Append(stu.Bstr())); CheckHr(qtisb->Append(stuSep.Bstr())); CheckHr(qtisb->AppendTsString(qtssTitle)); // The title. CheckHr(qtisb->Append(stuSep.Bstr())); // Leave the date blank if a date doesn't exist. if (ntim) { // Convert the date to a system date. SilTime tim = ntim; SYSTEMTIME stim; stim.wYear = (unsigned short) tim.Year(); stim.wMonth = (unsigned short) tim.Month(); stim.wDay = (unsigned short) tim.Date(); // Then format it to a time based on the current user locale. achar rgchDate[50]; // Tuesday, August 15, 2000 mardi 15 août 2000 ::GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &stim, NULL, rgchDate, 50); stu = rgchDate; CheckHr(qtisb->Append(stu.Bstr())); } CheckHr(qtisb->GetString(pptss)); return S_OK; END_COM_METHOD(g_fact2, IID_IVwViewConstructor) }
/*---------------------------------------------------------------------------------------------- Fill in the string with the given "Date Created" or "Date Modified" value. @param flid Field id for either "DateCreated" or "DateModified". @param strb Reference to the output string. ----------------------------------------------------------------------------------------------*/ void GeneralPropDlgTab::GetDateString(int flid, StrAppBuf & strb) { strb.Clear(); try { AfLpInfo * plpi = m_ppropd->GetLangProjInfo(); AssertPtr(plpi); CustViewDaPtr qcvd; plpi->GetDataAccess(&qcvd); AssertPtr(qcvd); int64 ntim = 0; SilTime tim; SYSTEMTIME stim; achar rgchDate[50]; // Tuesday, August 15, 2000 mardi 15 août 2000 achar rgchTime[50]; // 10:17:09 PM 22:20:08 int cch; HVO hvo = m_ppropd->GetObjId(); HRESULT hr; CheckHr(hr = qcvd->get_TimeProp(hvo, flid, &ntim)); if (hr == S_FALSE && !ntim) { int clid = MAKECLIDFROMFLID(flid); AfDbInfo * pdbi = plpi->GetDbInfo(); AssertPtr(pdbi); IOleDbEncapPtr qode; pdbi->GetDbAccess(&qode); AssertPtr(qode); IFwMetaDataCachePtr qmdc; pdbi->GetFwMetaDataCache(&qmdc); AssertPtr(qmdc); SmartBstr sbstrField; CheckHr(qmdc->GetFieldName(flid, &sbstrField)); IOleDbCommandPtr qodc; CheckHr(qode->CreateCommand(&qodc)); StrUni stu; ComBool fIsNull; ComBool fMoreRows; ULONG cbSpaceTaken; SmartBstr sbstrClass; CheckHr(qmdc->GetClassName(clid, &sbstrClass)); // Note that we need the view, not just the class table proper, in case the // attribute is defined on a superclass (such as CmMajorObject). stu.Format(L"select [%b] from [%b_] where [Id] = %d", sbstrField.Bstr(), sbstrClass.Bstr(), hvo); CheckHr(qodc->ExecCommand(stu.Bstr(), knSqlStmtSelectWithOneRowset)); CheckHr(qodc->GetRowset(0)); CheckHr(qodc->NextRow(&fMoreRows)); if (fMoreRows) { DBTIMESTAMP dbtim; CheckHr(qodc->GetColValue(1, reinterpret_cast <BYTE *>(&dbtim), sizeof(DBTIMESTAMP), &cbSpaceTaken, &fIsNull, 0)); if (!fIsNull) { stim.wYear = (unsigned short)dbtim.year; stim.wMonth = (unsigned short)dbtim.month; stim.wDayOfWeek = 0; stim.wDay = (unsigned short)dbtim.day; stim.wHour = (unsigned short)dbtim.hour; stim.wMinute = (unsigned short)dbtim.minute; stim.wSecond = (unsigned short)dbtim.second; stim.wMilliseconds = (unsigned short)(dbtim.fraction/1000000); cch = ::GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &stim, NULL, rgchDate, 50); rgchDate[cch] = 0; cch = ::GetTimeFormat(LOCALE_USER_DEFAULT, NULL, &stim, NULL, rgchTime, 50); rgchTime[cch] = 0; strb.Format(_T("%s %s"), rgchDate, rgchTime); } } } else if (ntim) { tim = ntim; // Convert the date to a system date. // Then format it to a time based on the current user locale. stim.wYear = (unsigned short)tim.Year(); stim.wMonth = (unsigned short)tim.Month(); stim.wDayOfWeek = (unsigned short)tim.WeekDay(); stim.wDay = (unsigned short)tim.Date(); stim.wHour = (unsigned short)tim.Hour(); stim.wMinute = (unsigned short)tim.Minute(); stim.wSecond = (unsigned short)tim.Second(); stim.wMilliseconds = (unsigned short)tim.MilliSecond(); cch = ::GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &stim, NULL, rgchDate, 50); rgchDate[cch] = 0; cch = ::GetTimeFormat(LOCALE_USER_DEFAULT, NULL, &stim, NULL, rgchTime, 50); rgchTime[cch] = 0; strb.Format(_T("%s %s"), rgchDate, rgchTime); } } catch (...) // Was empty. { throw; // For now we have nothing to add, so pass it on up. } }
/*---------------------------------------------------------------------------------------------- This is the method for displaying the name of a single reference. This view shows the name for an RnGenericRec consisting of the type of record, hyphen, title, hyphen, creation date. "Subevent - Fishing for pirana - 3/22/2001" @param pvwenv Pointer to the view environment. @param hvo The id of the object we are displaying. @param frag Identifies the part of the view we are currently displaying. @return HRESULT indicating success (S_OK), or failure (E_FAIL). ----------------------------------------------------------------------------------------------*/ STDMETHODIMP CleRecVc::Display(IVwEnv * pvwenv, HVO hvo, int frag) { BEGIN_COM_METHOD; ChkComArgPtr(pvwenv); Assert(false); // Is this needed for poss lists? switch (frag) { case kfrRefName: case kfrListName: { SmartBstr bstrClass = L"UnLoaded"; ITsStringPtr qtss; ITsStringPtr qtssTitle; // Make sure data is loaded. LoadDataFor(pvwenv, hvo, frag); AfMainWnd * pafw = AfApp::Papp()->GetCurMainWnd(); AssertPtr(pafw); AfLpInfo * plpi = pafw->GetLpInfo(); AssertPtr(plpi); AfDbInfo * pdbi = plpi->GetDbInfo(); AssertPtr(pdbi); #define HYPERLINK_CHANGE #ifdef HYPERLINK_CHANGE // Update the string with the new object. GUID uid; if (!pdbi->GetGuidFromId(hvo, uid)) ReturnHr(E_FAIL); StrUni stuData; OLECHAR * prgchData; // Make large enough for a guid plus the type character at the start. stuData.SetSize(isizeof(GUID) / isizeof(OLECHAR) + 1, &prgchData); *prgchData = kodtNameGuidHot; memmove(prgchData + 1, &uid, isizeof(uid)); ITsPropsFactoryPtr qtpf; ITsPropsBldrPtr qtpb; ITsTextPropsPtr qttp; ITsStrFactoryPtr qtsf; qtpf.CreateInstance(CLSID_TsPropsFactory); CheckHr(qtpf->GetPropsBldr(&qtpb)); CheckHr(qtpb->SetIntPropValues(ktptWs, ktpvDefault, pdbi->UserWs())); CheckHr(qtpb->SetStrPropValue(ktptObjData, stuData.Bstr())); CheckHr(qtpb->GetTextProps(&qttp)); qtsf.CreateInstance(CLSID_TsStrFactory); OLECHAR chObj = kchObject; CheckHr(qtsf->MakeStringWithPropsRgch(&chObj, 1, qttp, &qtss)); CheckHr(pvwenv->OpenSpan()); // REVIEW KenZ(RandyR) Whey are DN flids in this app? int flid = kflidRnGenericRec_Title; CheckHr(pvwenv->NoteDependency(&hvo, &flid, 1)); CheckHr(pvwenv->AddString(qtss)); // The class name. CheckHr(pvwenv->CloseSpan()); #else // !HYPERLINK_CHANGE int clid; HVO hvoOwn; int64 ntim; int ws = pdbi->UserWs(); ISilDataAccessPtr qsda; CheckHr(pvwenv->get_DataAccess(&qsda)); AssertPtr(qsda); CheckHr(qsda->get_IntProp(hvo, kflidCmObject_Class, &clid)); CheckHr(qsda->get_ObjectProp(hvo, kflidCmObject_Owner, &hvoOwn)); // REVIEW KenZ(RandyR) Whey are DN flids in this app? CheckHr(qsda->get_TimeProp(hvo, kflidRnGenericRec_DateCreated, &ntim)); CheckHr(qsda->get_StringProp(hvo, kflidRnGenericRec_Title, &qtssTitle)); int stid; // Sharon! Not needed? // if (clid == kclidRnEvent) // { // if (plpi->GetRnId() == hvoOwn) // stid = kstidEvent; // else // stid = kstidSubevent; // } // else if (clid == kclidRnAnalysis) // { // if (plpi->GetRnId() == hvoOwn) // stid = kstidAnalysis; // else // stid = kstidSubanalysis; // } StrUni stu(stid); StrUni stuSep(kstidSpHyphenSp); ITsStrFactoryPtr qtsf; qtsf.CreateInstance(CLSID_TsStrFactory); CheckHr(qtsf->MakeStringRgch(stu.Chars(), stu.Length(), ws, &qtss)); CheckHr(pvwenv->OpenSpan()); CheckHr(pvwenv->AddString(qtss)); // The class name. CheckHr(qtsf->MakeStringRgch(stuSep.Chars(), stuSep.Length(), ws, &qtss)); CheckHr(pvwenv->AddString(qtss)); // The separator //CheckHr(pvwenv->AddString(qtssTitle)); // The title. // The following gives the title of the owning object instead of the ref. CheckHr(pvwenv->AddStringProp(kflidRnGenericRec_Title, this)); // The title. CheckHr(pvwenv->AddString(qtss)); // The separator // Leave the date blank if a date doesn't exist. if (ntim) { // Convert the date to a system date. SilTime tim = ntim; SYSTEMTIME stim; stim.wYear = (unsigned short) tim.Year(); stim.wMonth = (unsigned short) tim.Month(); stim.wDay = (unsigned short) tim.Date(); // Then format it to a time based on the current user locale. char rgchDate[50]; // Tuesday, August 15, 2000 mardi 15 août 2000 ::GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &stim, NULL, rgchDate, 50); stu = rgchDate; CheckHr(qtsf->MakeStringRgch(stu.Chars(), stu.Length(), ws, &qtss)); CheckHr(pvwenv->AddString(qtss)); // The date. } CheckHr(pvwenv->CloseSpan()); #endif // HYPERLINK_CHANGE break; } } return S_OK; END_COM_METHOD(g_fact2, IID_IVwViewConstructor) }