//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef BUILDMODEDIALOG_H
#define BUILDMODEDIALOG_H

#ifdef _WIN32
#pragma once
#endif

#include <vgui_controls/Frame.h>

struct PanelItem_t;

namespace vgui
{

//-----------------------------------------------------------------------------
// Purpose: Dialog for use in build mode editing
//-----------------------------------------------------------------------------
class BuildModeDialog : public Frame
{
	DECLARE_CLASS_SIMPLE( BuildModeDialog, Frame );

public:
	BuildModeDialog( BuildGroup *buildGroup );
	~BuildModeDialog();

	// Set the current control to edit
	MESSAGE_FUNC_PTR( SetActiveControl, "SetActiveControl", panelPtr );

	// Update the current control with the current resource settings.
	MESSAGE_FUNC_PTR( UpdateControlData, "UpdateControlData", panel );

	// Store the current settings of all panels in the build group.
	virtual KeyValues *StoreSettings();

	// Store the current settings of the current panel 
	MESSAGE_FUNC( StoreUndoSettings, "StoreUndo" );

	/* CUSTOM MESSAGE HANDLING
		"SetActiveControl"
			input:	"PanelPtr"	- panel to set active control to edit to
	*/	

	MESSAGE_FUNC( OnShowNewControlMenu, "ShowNewControlMenu" );

protected:
	virtual void PerformLayout();
	virtual void OnClose();
	virtual void OnCommand( const char *command );
	virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
	virtual bool IsBuildGroupEnabled();

private:
	void CreateControls();
	
	void OnKeyCodeTyped(KeyCode code);
	MESSAGE_FUNC( ApplyDataToControls, "ApplyDataToControls" );
	MESSAGE_FUNC_PTR( OnTextChanged, "TextChanged", panel );
	MESSAGE_FUNC( OnDeletePanel, "DeletePanel" );
	void ExitBuildMode();
	Panel *OnNewControl(const char *name, int x = 0, int y = 0);
	MESSAGE_FUNC( DoUndo, "Undo" );
	MESSAGE_FUNC( DoCopy, "Copy" );
	MESSAGE_FUNC( DoPaste, "Paste" );
	MESSAGE_FUNC( EnableSaveButton, "EnableSaveButton" );
	void RevertToSaved();
	void ShowHelp();
	MESSAGE_FUNC( ShutdownBuildMode, "Close" );
	MESSAGE_FUNC( OnPanelMoved, "PanelMoved" );
	MESSAGE_FUNC( OnTextKillFocus, "TextKillFocus" );
	MESSAGE_FUNC( OnReloadLocalization, "ReloadLocalization" );
	MESSAGE_FUNC_CHARPTR( OnCreateNewControl, "CreateNewControl", text );

	MESSAGE_FUNC_CHARPTR( OnSetClipboardText, "SetClipboardText", text );

	MESSAGE_FUNC_INT( OnChangeChild, "OnChangeChild", direction );

	Panel *m_pCurrentPanel;
	BuildGroup *m_pBuildGroup;
	Label *m_pStatusLabel;
	ComboBox *m_pFileSelectionCombo;
	Divider *m_pDivider;

	class PanelList;
	PanelList *m_pPanelList;

	Button *m_pSaveButton;
	Button *m_pApplyButton;
	Button *m_pExitButton;
	Button *m_pDeleteButton;
	Button *m_pReloadLocalization;
	MenuButton *m_pVarsButton;

	bool _autoUpdate;

	ComboBox *m_pAddNewControlCombo; // combo box for adding new controls
	KeyValues *_undoSettings; // settings for the Undo command
	KeyValues *_copySettings; // settings for the Copy/Paste command
	char _copyClassName[255];
	int			m_nClick[ 2 ];

	void RemoveAllControls( void );
	void UpdateEditControl(PanelItem_t &panelItem, const char *datstring);

	enum {
		TYPE_STRING,
		TYPE_INTEGER,
		TYPE_COLOR,
		TYPE_ALIGNMENT,
		TYPE_AUTORESIZE,
		TYPE_CORNER,
		TYPE_LOCALIZEDSTRING,
	};

	vgui::DHANDLE< Menu >	m_hContextMenu;

	ComboBox	*m_pEditableParents;
	ComboBox	*m_pEditableChildren;

	Button		*m_pNextChild;
	Button		*m_pPrevChild;

	friend class PanelList;
};

} // namespace vgui


#endif // BUILDMODEDIALOG_H