|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
#include "actbusydoc.h"
#include "datamodel/dmelement.h"
#include "actbusytool.h"
//-----------------------------------------------------------------------------
// Constructor
//-----------------------------------------------------------------------------
CActBusyDoc::CActBusyDoc( IActBusyDocCallback *pCallback ) : m_pCallback( pCallback ) { m_hRoot = NULL; m_pFileName[0] = 0; m_bDirty = false; g_pDataModel->InstallNotificationCallback( this ); }
CActBusyDoc::~CActBusyDoc() { g_pDataModel->RemoveNotificationCallback( this ); }
//-----------------------------------------------------------------------------
// Inherited from INotifyUI
//-----------------------------------------------------------------------------
void CActBusyDoc::NotifyDataChanged( const char *pReason, int nNotifySource, int nNotifyFlags ) { OnDataChanged( pReason, nNotifySource, nNotifyFlags ); }
//-----------------------------------------------------------------------------
// Gets the file name
//-----------------------------------------------------------------------------
const char *CActBusyDoc::GetFileName() { return m_pFileName; }
void CActBusyDoc::SetFileName( const char *pFileName ) { Q_strncpy( m_pFileName, pFileName, sizeof( m_pFileName ) ); SetDirty( true ); }
//-----------------------------------------------------------------------------
// Dirty bits
//-----------------------------------------------------------------------------
void CActBusyDoc::SetDirty( bool bDirty ) { m_bDirty = bDirty; }
bool CActBusyDoc::IsDirty() const { return m_bDirty; }
//-----------------------------------------------------------------------------
// Creates a new act busy
//-----------------------------------------------------------------------------
void CActBusyDoc::CreateNew() { Assert( !m_hRoot.Get() );
// This is not undoable
CDisableUndoScopeGuard guard;
Q_strncpy( m_pFileName, "untitled", sizeof( m_pFileName ) ); DmFileId_t fileid = g_pDataModel->FindOrCreateFileId( m_pFileName );
// Create the main element
m_hRoot = g_pDataModel->CreateElement( "DmElement", "ActBusyList", fileid ); if ( m_hRoot == DMELEMENT_HANDLE_INVALID ) return;
g_pDataModel->SetFileRoot( fileid, m_hRoot );
// Each act busy list needs to have an editortype associated with it so it displays nicely in editors
m_hRoot->SetValue( "editorType", "actBusyList" ); m_hRoot->AddAttribute( "children", AT_ELEMENT_ARRAY );
SetDirty( false ); }
//-----------------------------------------------------------------------------
// Saves/loads from file
//-----------------------------------------------------------------------------
bool CActBusyDoc::LoadFromFile( const char *pFileName ) { Assert( !m_hRoot.Get() );
SetDirty( false ); m_hRoot = NULL;
Q_strncpy( m_pFileName, pFileName, sizeof( m_pFileName ) ); if ( !m_pFileName[0] ) return false;
// This is not undoable
CDisableUndoScopeGuard guard;
CDmElement *root = NULL; g_pDataModel->RestoreFromFile( m_pFileName, NULL, "actbusy", &root ); m_hRoot = root; OnDataChanged( "CActBusyDoc::LoadFromFile", NOTIFY_SOURCE_APPLICATION, NOTIFY_CHANGE_TOPOLOGICAL ); SetDirty( false ); return true; }
void CActBusyDoc::SaveToFile( ) { if ( m_hRoot.Get() && m_pFileName && m_pFileName[0] ) { g_pDataModel->SaveToFile( m_pFileName, NULL, "keyvalues", "actbusy", m_hRoot ); }
SetDirty( false ); }
//-----------------------------------------------------------------------------
// Creates a new act busy
//-----------------------------------------------------------------------------
void CActBusyDoc::CreateActBusy() { CDmElement *pRoot = GetRootObject(); if ( !pRoot ) return;
// This is undoable
CAppUndoScopeGuard guard( NOTIFY_SETDIRTYFLAG, "Add ActBusy", "Add ActBusy" );
DmFileId_t fileid = g_pDataModel->FindOrCreateFileId( m_pFileName );
// Create the main element
CDmeHandle<CDmElement> hActBusy = g_pDataModel->CreateElement( "DmElement", "ActBusy", fileid ); if ( hActBusy == DMELEMENT_HANDLE_INVALID ) return;
hActBusy->SetValue( "editorType", "actBusy" ); hActBusy->SetValue( "busy_anim", "" ); hActBusy->SetValue( "entry_anim", "" ); hActBusy->SetValue( "exit_anim", "" ); hActBusy->SetValue( "busy_sequence", "" ); hActBusy->SetValue( "entry_sequence", "" ); hActBusy->SetValue( "exit_sequence", "" ); hActBusy->SetValue( "min_time", 0.0f ); hActBusy->SetValue( "max_time", 0.0f ); hActBusy->SetValue( "interrupts", "BA_INT_NONE" );
CDmrElementArray<> children( pRoot, "children" ); children.AddToTail( hActBusy ); }
//-----------------------------------------------------------------------------
// Returns the root object
//-----------------------------------------------------------------------------
CDmElement *CActBusyDoc::GetRootObject() { return m_hRoot; }
//-----------------------------------------------------------------------------
// Called when data changes
//-----------------------------------------------------------------------------
void CActBusyDoc::OnDataChanged( const char *pReason, int nNotifySource, int nNotifyFlags ) { SetDirty( nNotifyFlags & NOTIFY_SETDIRTYFLAG ? true : false ); m_pCallback->OnDocChanged( pReason, nNotifySource, nNotifyFlags ); }
|