summaryrefslogtreecommitdiff
path: root/tools/actbusy/actbusydoc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/actbusy/actbusydoc.cpp')
-rw-r--r--tools/actbusy/actbusydoc.cpp184
1 files changed, 184 insertions, 0 deletions
diff --git a/tools/actbusy/actbusydoc.cpp b/tools/actbusy/actbusydoc.cpp
new file mode 100644
index 0000000..43116b4
--- /dev/null
+++ b/tools/actbusy/actbusydoc.cpp
@@ -0,0 +1,184 @@
+//========= 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 );
+}