/*========================================================================= * * CPASectO.hpp - CPA_SectionObject : implementation * * * Version 1.0 * Creation date 20.06.97 * Revision date * * Shaitan *=======================================================================*/ #include "stdafx.h" #ifdef ACTIVE_EDITOR #include "itf/CPASectO.hpp" //################################################################################# // INIT //################################################################################# /*=========================================================================== Constructor =========================================================================*/ CPA_SectionObject::CPA_SectionObject (const CString csReferencedSectionName, char *p_szDataPath, SCR_tdpfn_Ntfy_Callback pCallBack, void *pSectionData, BOOL bExistingSection) { // init parameters m_csReferencedSectionName = csReferencedSectionName; m_csInitialReferencedSectionName.Empty(); m_p_szDataPath = p_szDataPath; // parameters for save m_p_fnCallBackSave = pCallBack; m_bExistingSection = bExistingSection; m_pSectionData = pSectionData; // init notifications m_eLastNotify = m_eCurrentNotify = SCR_EA_Ntfy_Dummy; } /*=========================================================================== Copy-Constructor =========================================================================*/ CPA_SectionObject::CPA_SectionObject (CPA_SectionObject &r_oSource) { // init parameters m_csReferencedSectionName = r_oSource.GetReferencedSectionName(); m_csInitialReferencedSectionName.Empty(); m_p_szDataPath = r_oSource.m_p_szDataPath; // parameters for save m_p_fnCallBackSave = r_oSource.m_p_fnCallBackSave; m_pSectionData = r_oSource.m_pSectionData; m_bExistingSection = FALSE; // init notifications m_eLastNotify = m_eCurrentNotify = SCR_EA_Ntfy_Dummy; } /*=========================================================================== Destructor =========================================================================*/ CPA_SectionObject::~CPA_SectionObject (void) { } //################################################################################# // REFERENCES //################################################################################# /*=========================================================================== * Description: return referenced (minimum) name of the section * Creation date: 20.06.97 * Author: Shaitan *--------------------------------------------------------------------------- * Revision date: Author: *=========================================================================*/ CString CPA_SectionObject::GetReferencedSectionName (void) { return m_csReferencedSectionName; } /*=========================================================================== * Description: return complete name of the section * Creation date: 20.06.97 * Author: Shaitan *--------------------------------------------------------------------------- * Revision date: Author: *=========================================================================*/ CString CPA_SectionObject::GetCompleteSectionName (void) { CString csCompleteName; // complete name : data path + short name csCompleteName = m_p_szDataPath; csCompleteName += "\\" + m_csReferencedSectionName; return csCompleteName; } //################################################################################# // NOTIFICATIONS //################################################################################# /*=========================================================================== * Description: notify section for Add or Rebuild, according to flag * Creation date: 20.06.97 * Author: Shaitan *--------------------------------------------------------------------------- * Revision date: Author: *=========================================================================*/ void CPA_SectionObject::fn_vWriteSection(void) { fn_vNotifySection( m_bExistingSection ? SCR_EA_Ntfy_RebuildSection : SCR_EA_Ntfy_AddSection ); } /*=========================================================================== * Description: notify section for Delete, and save current notification * Creation date: 20.06.97 * Author: Shaitan *--------------------------------------------------------------------------- * Revision date: Author: *=========================================================================*/ void CPA_SectionObject::fn_vDeleteSection (void) { if( m_bExistingSection || (m_eCurrentNotify != SCR_EA_Ntfy_Dummy) ) { // save current notification m_eLastNotify = m_eCurrentNotify; // add delete notification fn_vNotifySection( SCR_EA_Ntfy_DeleteSection ) ; } } /*=========================================================================== * Description: cancel Delete notification and restore previous one * Creation date: 20.06.97 * Author: Shaitan *--------------------------------------------------------------------------- * Revision date: Author: *=========================================================================*/ void CPA_SectionObject::fn_vRestoreSection (void) { // remove current script notification if ( m_eCurrentNotify == SCR_EA_Ntfy_DeleteSection ) SCR_fn_v_SvL1_DeleteRegisterNotify((char*) (LPCTSTR)GetCompleteSectionName(), SCR_CDR_c_RdL0_Match); // restore previous notification if( m_eLastNotify != SCR_EA_Ntfy_Dummy ) { fn_vNotifySection( m_eLastNotify ); m_eLastNotify = SCR_EA_Ntfy_Dummy; } else m_eCurrentNotify = SCR_EA_Ntfy_Dummy; } /*=========================================================================== * Description: rename section => Delete previous and Add new one * Creation date: 20.06.97 * Author: Shaitan *--------------------------------------------------------------------------- * Revision date: Author: *=========================================================================*/ void CPA_SectionObject::fn_vRenameSection (const CString csNewReferencedSectionName) { // delete previous section fn_vDeleteSection(); // back to initial name ? if (csNewReferencedSectionName == m_csInitialReferencedSectionName) { // initial name => section exists ! m_bExistingSection = TRUE; // rename section m_csReferencedSectionName = csNewReferencedSectionName; // notify for Rebuild m_eLastNotify = SCR_EA_Ntfy_RebuildSection; fn_vRestoreSection(); } // new name else { // first rename of existing section if (m_bExistingSection) { // save initial name m_csInitialReferencedSectionName = m_csReferencedSectionName; // update flag m_bExistingSection = FALSE; } // rename and save new section m_csReferencedSectionName = csNewReferencedSectionName; fn_vWriteSection(); } } /*=========================================================================== * Description: notify section without any test * Creation date: 20.06.97 * Author: Shaitan *--------------------------------------------------------------------------- * Revision date: Author: *=========================================================================*/ void CPA_SectionObject::fn_vNotifySection(SCR_tde_Ntfy_Action eAction) { if (m_eCurrentNotify != eAction) { // update current notification m_eCurrentNotify = eAction; // register notification SCR_fn_v_SvL1_RegisterNotify((char*) (LPCTSTR) GetCompleteSectionName(), m_p_fnCallBackSave, m_pSectionData, eAction); } } /*=========================================================================== * Description: reinit parameters when section was written or deleted * Creation date: 03.07.97 * Author: Shaitan *--------------------------------------------------------------------------- * Revision date: Author: *=========================================================================*/ void CPA_SectionObject::fn_vSectionSaved (void) { // section exists SetExistingSection(TRUE); // no more notifications m_eLastNotify = m_eCurrentNotify = SCR_EA_Ntfy_Dummy; } //=========================================================================== void CPA_SectionObject::fn_vSectionDeleted (void) { // section doesn't exist SetExistingSection(FALSE); // no more notifications m_eLastNotify = m_eCurrentNotify = SCR_EA_Ntfy_Dummy; } #endif ACTIVE_EDITOR