/*---------------------------------------------------------------------------------------------- @return true if any changes have been made. ----------------------------------------------------------------------------------------------*/ bool AfDeFeCliRef::IsDirty() { if (!m_hwnd) return false; // Editor not active. HVO hvoOrig; CustViewDaPtr qcvd; GetDataAccess(&qcvd); AssertPtr(qcvd); CheckHr(qcvd->get_ObjectProp(m_hvoObj, m_flid, &hvoOrig)); return hvoOrig != m_pss; }
/*---------------------------------------------------------------------------------------------- Refresh the field from the data cache. ----------------------------------------------------------------------------------------------*/ void AfDeFeCliRef::UpdateField() { // Get the item info from the cache. CustViewDaPtr qcvd; GetDataAccess(&qcvd); AssertPtr(qcvd); HVO hvoPss; CheckHr(qcvd->get_ObjectProp(m_hvoObj, m_flid, &hvoPss)); m_pss = hvoPss; // Get the string from the poss cache. ITsStringPtr qtss; ITsStrFactoryPtr qtsf; StrUni stu; PossListInfoPtr qpli; PossItemInfo * ppii; int ipss; qtsf.CreateInstance(CLSID_TsStrFactory); int ws = m_ws; if (m_pss) { GetLpInfo()->LoadPossList(m_hvoPssl, m_wsMagic, &qpli); AssertPtr(qpli); ipss = qpli->GetIndexFromId(m_pss); if (ipss >= 0) { ppii = qpli->GetPssFromIndex(ipss); AssertPtr(ppii); if (m_fHier) ppii->GetHierName(qpli, stu, m_pnt); else ppii->GetName(stu, m_pnt); ws = ppii->GetWs(); } } qtsf->MakeStringRgch(stu.Chars(), stu.Length(), ws, &qtss); m_qtss = qtss; // If we have an edit box, update the contents. if (m_hwnd) { // Setting the property causes a recursive call to OnChange, so we want to block it // from making a further change. (e.g., when you backspace to set the string to null // then tab to the next field, we want it to stay null, not go to the first item in // the list.) m_fRecurse = true; ::SendMessage(m_hwnd, FW_EM_SETTEXT, 0, (LPARAM)m_qtss.Ptr()); } }
/*---------------------------------------------------------------------------------------------- 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) }