You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
5.8 KiB
195 lines
5.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Core Movie Maker UI API |
|
// |
|
//============================================================================= |
|
|
|
#include "vgui_controls/savedocumentquery.h" |
|
#include "vgui_controls/Button.h" |
|
#include "vgui_controls/Label.h" |
|
#include "vgui_controls/Frame.h" |
|
#include "vgui/ISurface.h" |
|
#include "vgui/IVGui.h" |
|
#include "tier1/KeyValues.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
|
|
using namespace vgui; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// This dialog asks if you want to save your work |
|
//----------------------------------------------------------------------------- |
|
class CSaveDocumentQuery : public vgui::Frame |
|
{ |
|
DECLARE_CLASS_SIMPLE( CSaveDocumentQuery, vgui::Frame ); |
|
|
|
public: |
|
CSaveDocumentQuery( vgui::Panel *pParent, const char *filename, const char *pFileType, int nContext, |
|
vgui::Panel *pActionSignalTarget = 0, KeyValues *pKeyValues = 0 ); |
|
~CSaveDocumentQuery(); |
|
|
|
// Inherited from vgui::Frame |
|
virtual void OnCommand( char const *cmd ); |
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); |
|
|
|
// Put the message box into a modal state |
|
void DoModal(); |
|
|
|
private: |
|
// Posts commands to the action signal target |
|
void PostCommand( const char *pCommand ); |
|
|
|
vgui::Label *m_pMessageLabel; |
|
vgui::Button *m_pYesButton; |
|
vgui::Button *m_pNoButton; |
|
vgui::Button *m_pCancelButton; |
|
vgui::Panel *m_pActionSignalTarget; |
|
|
|
char m_szFileName[ 256 ]; |
|
char m_szFileType[ 256 ]; |
|
int m_nContext; |
|
KeyValues* m_pPostSaveKeyValues; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Show the save document query dialog |
|
//----------------------------------------------------------------------------- |
|
void ShowSaveDocumentQuery( vgui::Panel *pParent, const char *pFileName, const char *pFileType, int nContext, vgui::Panel *pActionSignalTarget, KeyValues *pPostSaveCommand ) |
|
{ |
|
CSaveDocumentQuery *query = new CSaveDocumentQuery( pParent, pFileName, pFileType, nContext, pActionSignalTarget, pPostSaveCommand ); |
|
query->SetSmallCaption( true ); |
|
query->DoModal(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Constructor |
|
//----------------------------------------------------------------------------- |
|
CSaveDocumentQuery::CSaveDocumentQuery( vgui::Panel *pParent, char const *pFileName, const char *pFileType, int nContext, vgui::Panel *pActionSignalTarget, KeyValues *pPostSaveCommand ) : |
|
BaseClass( pParent, "SaveDocumentQuery" ), |
|
m_nContext( nContext ), |
|
m_pActionSignalTarget( pActionSignalTarget ) |
|
{ |
|
if ( !pFileName || !pFileName[0] ) |
|
{ |
|
pFileName = "<untitled>"; |
|
} |
|
Q_strncpy( m_szFileName, pFileName, sizeof( m_szFileName ) ); |
|
Q_strncpy( m_szFileType, pFileType, sizeof( m_szFileType ) ); |
|
m_pPostSaveKeyValues = pPostSaveCommand; |
|
|
|
SetDeleteSelfOnClose(true); |
|
|
|
SetMenuButtonResponsive(false); |
|
SetMinimizeButtonVisible(false); |
|
SetCloseButtonVisible(false); |
|
SetSizeable(false); |
|
|
|
SetTitle( "Save Changes", true ); |
|
|
|
m_pMessageLabel = new Label( this, "FileNameLabel", "" ); |
|
|
|
m_pYesButton = new Button( this, "Yes", "Yes", this, "yes" ); |
|
m_pNoButton = new Button( this, "No", "No", this, "no" ); |
|
m_pCancelButton = new Button( this, "Cancel", "Cancel", this, "cancel" ); |
|
|
|
LoadControlSettings( "resource/ToolSaveDocumentQuery.res" ); |
|
|
|
m_pMessageLabel->SetText( m_szFileName ); |
|
} |
|
|
|
CSaveDocumentQuery::~CSaveDocumentQuery() |
|
{ |
|
if ( m_pPostSaveKeyValues ) |
|
{ |
|
m_pPostSaveKeyValues->deleteThis(); |
|
m_pPostSaveKeyValues = NULL; |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Posts commands to the action signal target |
|
//----------------------------------------------------------------------------- |
|
void CSaveDocumentQuery::PostCommand( const char *pCommand ) |
|
{ |
|
KeyValues *kv = new KeyValues( pCommand ); |
|
vgui::ivgui()->PostMessage( m_pActionSignalTarget->GetVPanel(), kv, 0 ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Process commands |
|
//----------------------------------------------------------------------------- |
|
void CSaveDocumentQuery::OnCommand( char const *cmd ) |
|
{ |
|
if ( !Q_stricmp( cmd, "yes" ) ) |
|
{ |
|
KeyValues *kv = new KeyValues( "OnSaveFile" ); |
|
kv->SetString( "filename", m_szFileName ); |
|
kv->SetString( "filetype", m_szFileType ); |
|
kv->SetInt( "context", m_nContext ); |
|
kv->SetPtr( "actionTarget", m_pActionSignalTarget ); |
|
if ( m_pPostSaveKeyValues ) |
|
{ |
|
kv->AddSubKey( m_pPostSaveKeyValues->MakeCopy() ); |
|
} |
|
vgui::ivgui()->PostMessage( m_pActionSignalTarget->GetVPanel(), kv, 0 ); |
|
MarkForDeletion(); |
|
} |
|
else if ( !Q_stricmp( cmd, "no" ) ) |
|
{ |
|
PostCommand( "OnMarkNotDirty" ); |
|
if ( m_pPostSaveKeyValues ) |
|
{ |
|
vgui::ivgui()->PostMessage( m_pActionSignalTarget->GetVPanel(), m_pPostSaveKeyValues->MakeCopy(), 0 ); |
|
} |
|
MarkForDeletion(); |
|
} |
|
else if ( !Q_stricmp( cmd, "cancel" ) ) |
|
{ |
|
PostCommand( "OnCancelSaveDocument" ); |
|
MarkForDeletion(); |
|
} |
|
else |
|
{ |
|
BaseClass::OnCommand( cmd ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Deal with scheme |
|
//----------------------------------------------------------------------------- |
|
void CSaveDocumentQuery::ApplySchemeSettings(IScheme *pScheme) |
|
{ |
|
BaseClass::ApplySchemeSettings(pScheme); |
|
|
|
int wide, tall; |
|
GetSize( wide, tall ); |
|
|
|
int swide, stall; |
|
surface()->GetScreenSize(swide, stall); |
|
|
|
// put the dialog in the middle of the screen |
|
SetPos((swide - wide) / 2, (stall - tall) / 2); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Put the message box into a modal state |
|
//----------------------------------------------------------------------------- |
|
void CSaveDocumentQuery::DoModal() |
|
{ |
|
SetVisible( true ); |
|
SetEnabled( true ); |
|
MoveToFront(); |
|
|
|
RequestFocus(); |
|
|
|
InvalidateLayout(); |
|
}
|
|
|