/*---------------------------------------------------------------------------------------------- Insert material as appropriate to display the specified object. This method has not yet been tested...maybe not even compiled? ----------------------------------------------------------------------------------------------*/ STDMETHODIMP VwBaseVc::DisplayEmbeddedObject(IVwEnv * pvwenv, HVO hvo) { BEGIN_COM_METHOD; ChkComArgPtr(pvwenv); // See if it is a CmPicture. ISilDataAccessPtr qsda; CheckHr(pvwenv->get_DataAccess(&qsda)); int clsid; CheckHr(qsda->get_IntProp(hvo, kflidCmObject_Class, &clsid)); if (clsid != kclidCmPicture) return S_OK; // don't know how to deal with it. StrUni stuRootDir = DirectoryFinder::FwRootDataDir(); HVO hvoFile; CheckHr(qsda->get_ObjectProp(hvo, kflidCmPicture_PictureFile, &hvoFile)); if (hvoFile == 0) return S_OK; SmartBstr sbstrFileName; CheckHr(qsda->get_UnicodeProp(hvoFile, kflidCmFile_InternalPath, &sbstrFileName)); if (sbstrFileName.Length() == 0) return S_OK; StrUni stuPath; stuPath.Format(L"%s,%s,%s", stuRootDir.Chars(), L"\\", sbstrFileName.Chars()); IPicturePtr qpic; try { IStreamPtr qstrm; FileStream::Create(stuPath, STGM_READ, &qstrm); STATSTG stg; CheckHr(qstrm->Stat(&stg, STATFLAG_NONAME)); LONG cbdata = (LONG)stg.cbSize.QuadPart; CheckHr(::OleLoadPicture(qstrm, cbdata, FALSE, IID_IPicture, (LPVOID *)&qpic)); CheckHr(pvwenv->AddPicture(qpic, ktagNotAnAttr, 0, 0)); } catch (...) { return S_OK; // if anything goes wrong (e.g., file not found), just give up for now. // Todo: insert a 'file XXX not found string. } // Todo: also add the caption. END_COM_METHOD(g_fact, IID_IVwViewConstructor); }
/*---------------------------------------------------------------------------------------------- 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) }
/*---------------------------------------------------------------------------------------------- Load the data needed to display this view. In this case, we need to load the class, owner (so we can tell whether it is a subitem), the title, and create date. If all of these are already in the cache, don't reload it. @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::LoadDataFor(IVwEnv * pvwenv, HVO hvo, int frag) { BEGIN_COM_METHOD; ChkComArgPtr(pvwenv); Assert(false); // TODO: rework StrUni stuSql; ISilDataAccessPtr qsda; CheckHr(pvwenv->get_DataAccess(&qsda)); bool fLoaded = false; int clid; CheckHr(qsda->get_IntProp(hvo, kflidCmObject_Class, &clid)); if (clid) { HVO hvoOwn; CheckHr(qsda->get_ObjectProp(hvo, kflidCmObject_Owner, &hvoOwn)); if (hvoOwn) { int64 tim; // REVIEW KenZ(RandyR) Whey are DN flids in this app? CheckHr(qsda->get_TimeProp(hvo, kflidRnGenericRec_DateCreated, &tim)); if (tim) { ITsStringPtr qtss; CheckHr(qsda->get_StringProp(hvo, kflidRnGenericRec_Title, &qtss)); if (qtss) { int cch; CheckHr(qtss->get_Length(&cch)); if (cch) fLoaded = true; } } } } if (!fLoaded) { // If any field is missing from the cache, load everything. IDbColSpecPtr qdcs; IVwOleDbDaPtr qda; CheckHr(qsda->QueryInterface(IID_IVwOleDbDa, (void**)&qda)); stuSql.Format(L"select id, Class$, Owner$, DateCreated, Title, Title_Fmt " L"from RnGenericRec_ " L"where id = %d", hvo); qdcs.CreateInstance(CLSID_DbColSpec); CheckHr(qdcs->Push(koctBaseId, 0, 0, 0)); CheckHr(qdcs->Push(koctInt, 1, kflidCmObject_Class, 0)); CheckHr(qdcs->Push(koctObj, 1, kflidCmObject_Owner, 0)); // REVIEW KenZ(RandyR) Whey are DN flids in this app? CheckHr(qdcs->Push(koctTime, 1, kflidRnGenericRec_DateCreated, 0)); CheckHr(qdcs->Push(koctString, 1, kflidRnGenericRec_Title, 0)); CheckHr(qdcs->Push(koctFmt, 1, kflidRnGenericRec_Title, 0)); AfMainWnd * pafw = AfApp::Papp()->GetCurMainWnd(); AssertPtr(pafw); AfStatusBar * pstbr = pafw->GetStatusBarWnd(); AssertPtr(pstbr); bool fProgBar = pstbr->IsProgressBarActive(); if (!fProgBar) { StrApp strMsg(kstidStBar_LoadingData); pstbr->StartProgressBar(strMsg.Chars(), 0, 70, 1); } // Execute the query and store results in the cache. CheckHr(qda->Load(stuSql.Bstr(), qdcs, hvo, 0, pstbr, NULL)); if (!fProgBar) pstbr->EndProgressBar(); } return S_OK; END_COM_METHOD(g_fact2, IID_IVwViewConstructor) }