void CEditorRoot::SaveAllGraphs()
{
	for ( int i = 0; i < GetNumFlowGraphs(); i++ )
	{
		if ( GetFlowGraph( i )->GetShadername() )
			GetFlowGraph(i)->SaveToFile( GetFlowGraph(i)->GetShadername() );
	}
}
void CEditorRoot::InvokeShaderToScene( GenericShaderData *pShader )
{
	if ( pShader == NULL )
		pShader = m_pLastFullCompiledShader;

	if ( pShader == NULL )
		return;

	ReloadGameShaders( pShader );

	for ( int i = 0; i < GetNumFlowGraphs(); i++ )
	{
		if ( GetFlowGraph(i)->GetFlowgraphType() == CNodeView::FLOWGRAPH_POSTPROC )
			GetFlowGraph(i)->MakeSolversDirty();
	}
}
void CEditorRoot::RefreshNodeInstances( int iNodeType, KeyValues *pParams )
{
	const char *pszParam_Path = pParams->GetString( "filepath" );

	for ( int i = 0; i < pNodeSheet->GetNumPages(); i++ )
	{
		CNodeView *pView = GetFlowGraph( i );

		for ( int n = 0; n < pView->GetNumNodes(); n++ )
		{
			CBaseNode *pNode = pView->GetNode( n );

			if ( pNode->GetNodeType() != iNodeType )
				continue;

			switch ( iNodeType )
			{
			case HLSLNODE_UTILITY_CUSTOMCODE:
				{
					CNodeCustom *pCustomNode = (CNodeCustom*)pNode;
					if ( pCustomNode->IsUsingInlineCode() || Q_stricmp( pCustomNode->GetFilePath(), pszParam_Path ) )
						break;

					pCustomNode->UpdateFromFile();
				}
				break;
			}
		}
	}

	pParams->deleteThis();
}
void CEditorRoot::UpdateTabColor( CNodeView *pView )
{
	if ( !pView )
		pView = GetSafeFlowgraph();

	CNodeView::FlowGraphType_t mode = pView->GetFlowgraphType();

	Color col( 127, 127, 127, 255 );

	switch ( mode )
	{
	case CNodeView::FLOWGRAPH_HLSL:
			col.SetColor( 100, 108, 102, 255 );
		break;
	case CNodeView::FLOWGRAPH_POSTPROC:
			col.SetColor( 108, 104, 100, 255 );
		break;
	default:
			Assert(0);
		break;
	}

	int pageIndex = -1;
	for ( int i = 0; i < pNodeSheet->GetNumPages() && pageIndex < 0; i++ )
		if ( GetFlowGraph( i ) == pView )
			pageIndex = i;

	Assert( pageIndex >= 0 && pageIndex < pNodeSheet->GetNumPages() );
	pNodeSheet->SetTabColor( pageIndex, col );
}
void CEditorRoot::OnAskPageClose( KeyValues *pKV )
{
	Panel *pPageTab = (Panel*)pKV->GetPtr( "PageTab" );
	CNodeView *pGraph = GetFlowGraph( pKV->GetInt( "TabIndex" ) );

	if ( pPageTab == NULL ||
		pGraph == NULL )
	{
		Assert( 0 );
		return;
	}

	ConfirmTabClose( pPageTab->GetVPanel() );

#if 0
	if ( !m_bWarnOnClose || !pGraph->IsSaveDirty() )
		ConfirmTabClose( pPageTab->GetVPanel() );
	else
	{
		const char *pszShadername = pGraph->GetShadername();

		char shortName[MAX_PATH*4];

		KeyValues *pKVResponse_Yes = new KeyValues( "ResponseGraphSave", "DoSave", 1 );
		KeyValues *pKVResponse_No = new KeyValues( "ResponseGraphSave", "DoSave", 0 );

		if ( pszShadername == NULL )
		{
			pKVResponse_No->deleteThis();
			pKVResponse_No = new KeyValues( "ResponseGraphSave", "DoSave", 2 );
		}
		else
		{
			Q_FileBase( pszShadername, shortName, sizeof( shortName ) );
		}

		pKVResponse_Yes->SetPtr( "PageTab", pPageTab );
		pKVResponse_No->SetPtr( "PageTab", pPageTab );
		pKVResponse_Yes->SetPtr( "Graph", pGraph );
		pKVResponse_No->SetPtr( "Graph", pGraph );

		vgui::PromptSimple *prompt = new vgui::PromptSimple( this, "Unsaved changes" );
		prompt->MoveToCenterOfScreen();

		if ( pszShadername != NULL )
			prompt->SetText( VarArgs( "The graph %s has unsaved changes. Save now?", shortName ) );
		else
			prompt->SetText( "This graph has not been saved yet, are you sure that you want to close it?" );

		prompt->AddButton( "Yes", pKVResponse_Yes );
		prompt->AddButton( "No", pKVResponse_No );
		prompt->MakeReadyForUse();
		prompt->InvalidateLayout( true, true );
	}
#endif
}
Esempio n. 6
0
//------------------------------------------------------------------------------------------------------------------------
void CCustomAction::TerminateAction()
{
	m_currentState = CAS_Ended;

	IFlowGraph* pFlowGraph = GetFlowGraph();
	if (pFlowGraph)
	{
		pFlowGraph->SetCustomAction(0);
	}

	m_pObjectEntity = NULL;

	this->NotifyListeners(CAE_Terminated, *this);

	m_listeners.Clear();
}