/*---------------------------------------------------------------------------------------------- Close the current editor, saving changes that were made. hwnd is the editor hwnd. @param fForce True if we want to force the editor closed without making any validity checks or saving any changes. ----------------------------------------------------------------------------------------------*/ void AfDeFeEdBoxBut::EndEdit(bool fForce) { SuperClass::EndEdit(fForce); if (!fForce) { if (!SaveEdit()) { Assert(false); // Should have called IsOkToClose() first. } EndTempEdit(); SaveFullCursorInfo(); } // Get rid of the edit box and button. ::DestroyWindow(m_hwnd); m_hwnd = 0; m_hwndButton = 0; }
/*---------------------------------------------------------------------------------------------- Save changes that have been made to the current editor. @return true if edit saved successfully ----------------------------------------------------------------------------------------------*/ bool AfDeFeCliRef::SaveEdit() { if (m_fDelFromDialog) { m_fDelFromDialog = false; return true; } EndTempEdit(); if (IsDirty()) { CustViewDaPtr qcvd; GetDataAccess(&qcvd); AssertPtr(qcvd); // Check if the record has been edited by someone else since we first loaded the data. HRESULT hr; CheckHr(hr = qcvd->CheckTimeStamp(m_hvoObj)); if (hr != S_OK) { // If it was changed and the user does not want to overwrite it, perform a refresh // so the displayed field will revert to it's original value. m_qadsc->UpdateAllDEWindows(m_hvoObj, m_flid); qcvd->PropChanged(NULL, kpctNotifyAll, m_hvoObj, m_flid, 0, 1, 1); } else { // Update the value in the cache and refresh views. BeginChangesToLabel(); qcvd->SetObjProp(m_hvoObj, m_flid, m_pss); m_qadsc->UpdateAllDEWindows(m_hvoObj, m_flid); qcvd->PropChanged(NULL, kpctNotifyAll, m_hvoObj, m_flid, 0, 1, 1); CheckHr(qcvd->EndUndoTask()); } } // We need to leave in a state that cancels undo actions since this may be called // without actually closing the edit box. BeginTempEdit(); return true; }