CGameObjectEditor::CGameObjectEditor( CApplication& app, CGameObjectPrototype& proto ) :
    QDialog( & app.GetMainFrame(), Qt::Tool  )
{
	setWindowTitle( "Game object Editor" );
    m_App = &app;
	m_GameObjectProto = NULL;
	m_ProcessItemChanged = TRUE;

	SetGameObjectPrototype( proto );

	// Editor
	QHBoxLayout* editorLayout = new QHBoxLayout();
	QVBoxLayout* serviceAndParamLayout = new QVBoxLayout();
	m_ObjectTree = new QTreeWidget();
	
	connect( m_ObjectTree, SIGNAL( itemChanged( QTreeWidgetItem*, int ) ), this, SLOT( OnUIItemChanged( QTreeWidgetItem*, int ) ) );
	connect( m_ObjectTree, SIGNAL( itemSelectionChanged() ), this, SLOT( OnUISelectionChanged() ) );

	// Parameter
	QGroupBox* parameterGB = new QGroupBox( "Parameters:" );

	// Parameter type
	m_ParameterTypeList = new QListWidget();
	m_ParameterTypeList->setMaximumHeight( 100 );
	QPushButton* addParamType = new QPushButton( "Add");
	connect( addParamType, SIGNAL( clicked() ), this, SLOT( OnUIAddParam() ) );
	m_RemoveParam = new QPushButton( "Remove");
	connect( m_RemoveParam, SIGNAL( clicked() ), this, SLOT( OnUIRemoveParam() ) );
	QVBoxLayout* paramTypeLayout = new QVBoxLayout();
	paramTypeLayout->addWidget( new QLabel( "Parameter type" ) );
	paramTypeLayout->addWidget( m_ParameterTypeList );
	QHBoxLayout* addRemoveParamLayout = new QHBoxLayout();
	addRemoveParamLayout->addStretch( 1 );
	addRemoveParamLayout->addWidget( addParamType );
	addRemoveParamLayout->addWidget( m_RemoveParam );
	paramTypeLayout->addLayout( addRemoveParamLayout );

	parameterGB->setLayout( paramTypeLayout );

	// Service
	QGroupBox* serviceGB = new QGroupBox( "Services:" );

	// service type
	m_ServiceTypeList = new QListWidget();
	m_ServiceTypeList->setMaximumHeight( 100 );
	QPushButton* addServiceType = new QPushButton( "Add");
	connect( addServiceType, SIGNAL( clicked() ), this, SLOT( OnUIAddService() ) );
	m_RemoveService = new QPushButton( "Remove");
	connect( m_RemoveService, SIGNAL( clicked() ), this, SLOT( OnUIRemoveService() ) );
	QVBoxLayout* serviceTypeLayout = new QVBoxLayout();
	serviceTypeLayout->addWidget( new QLabel( "Service type" ) );
	serviceTypeLayout->addWidget( m_ServiceTypeList );
	QHBoxLayout* addRemoveServiceLayout = new QHBoxLayout();
	addRemoveServiceLayout->addStretch( 1 );
	addRemoveServiceLayout->addWidget( addServiceType ) ;
	addRemoveServiceLayout->addWidget( m_RemoveService ) ;
	serviceTypeLayout->addLayout( addRemoveServiceLayout );

	serviceGB->setLayout( serviceTypeLayout );

	// Group service and parameters
	serviceAndParamLayout->addStretch( 1 );
	serviceAndParamLayout->addWidget( parameterGB );
	serviceAndParamLayout->addWidget( serviceGB );

	// Add tree 
	editorLayout->addLayout( serviceAndParamLayout );
	editorLayout->addWidget( m_ObjectTree );

	// Ok Cancel
	QHBoxLayout* okCancelLayout = new QHBoxLayout();
	QPushButton* okBtn = new QPushButton( "OK" );
	connect( okBtn, SIGNAL( clicked() ), this, SLOT( OnUIOk() ) );
	QPushButton* cancelBtn = new QPushButton( "Cancel" );
	connect( cancelBtn, SIGNAL( clicked() ), this, SLOT( OnUICancel() ) );

	okCancelLayout->addStretch( 1 );
	okCancelLayout->addWidget( okBtn );
	okCancelLayout->addWidget( cancelBtn );

	// setup layout
	QVBoxLayout* vLayout = new QVBoxLayout();

	vLayout->addLayout( editorLayout );
	vLayout->addLayout( okCancelLayout );

	vLayout->setContentsMargins( 0, 0, 0, 0 );

	setLayout( vLayout );

	m_RemoveService->setEnabled( FALSE );
	m_RemoveParam->setEnabled( FALSE );

	Populate();
}
Example #2
0
CShaderEditor::CShaderEditor( CApplication& app, CAssetShader& shader ) :
    QDockWidget( "Shader Editor", &app.GetMainFrame() ),
	m_IconTable( (const char** ) ShaderEditor_xpm )
{
	setAttribute(Qt::WA_DeleteOnClose);

	UInt32 border = 4;
    m_App = &app;
	m_Shader = NULL;

	m_Frame = new QWidget( this );

	QAction* action = NULL;
	QToolBar*	toolBar = new QToolBar( m_Frame );
	action = toolBar->addAction( m_IconTable.GetIcon( 0 ), "Open" );
	connect( action, SIGNAL( triggered() ), this, SLOT( OnUIOpen() ) );
	action = toolBar->addAction( m_IconTable.GetIcon( 1 ), "Save" );
	connect( action, SIGNAL( triggered() ), this, SLOT( OnUISave() ) );
	toolBar->addSeparator();
	action = toolBar->addAction( m_IconTable.GetIcon( 2 ), "Undo" );
	connect( action, SIGNAL( triggered() ), this, SLOT( OnUIUndo() ) );
	action = toolBar->addAction( m_IconTable.GetIcon( 3 ), "Redo" );
	connect( action, SIGNAL( triggered() ), this, SLOT( OnUIRedo() ) );
    toolBar->addSeparator();
    action = toolBar->addAction( m_IconTable.GetIcon( 4 ), "Compile" );
    connect( action, SIGNAL( triggered() ), this, SLOT( OnUICompile() ) );

	m_TextEdit[nShaderProgramType_Vertex] = new QTextEdit( m_Frame);
	m_TextEdit[nShaderProgramType_Vertex]->setUndoRedoEnabled( TRUE );
	m_TextEdit[nShaderProgramType_Vertex]->setTabStopWidth( QFontMetrics( m_TextEdit[nShaderProgramType_Vertex]->currentFont( ) ).width(' ') * 4 );
    CShaderEditorSyntaxHighlighter* highlighterVertex = new CShaderEditorSyntaxHighlighter(m_TextEdit[nShaderProgramType_Vertex]->document());

    m_TextEdit[nShaderProgramType_Pixel] = new QTextEdit( m_Frame);
    m_TextEdit[nShaderProgramType_Pixel]->setUndoRedoEnabled( TRUE );
    m_TextEdit[nShaderProgramType_Pixel]->setTabStopWidth( QFontMetrics( m_TextEdit[nShaderProgramType_Pixel]->currentFont( ) ).width(' ') * 4 );
    CShaderEditorSyntaxHighlighter* highlighterPixel = new CShaderEditorSyntaxHighlighter(m_TextEdit[nShaderProgramType_Pixel]->document());

    m_TextEdit[nShaderProgramType_Geometry] = new QTextEdit( m_Frame);
    m_TextEdit[nShaderProgramType_Geometry]->setUndoRedoEnabled( TRUE );
    m_TextEdit[nShaderProgramType_Geometry]->setTabStopWidth( QFontMetrics( m_TextEdit[nShaderProgramType_Geometry]->currentFont( ) ).width(' ') * 4 );
    CShaderEditorSyntaxHighlighter* highlighterGeometry = new CShaderEditorSyntaxHighlighter(m_TextEdit[nShaderProgramType_Geometry]->document());

    m_TabWidget = new QTabWidget( m_Frame );
    m_TabWidget->addTab( m_TextEdit[nShaderProgramType_Vertex], "Vertex Program" );
    m_TabWidget->addTab( m_TextEdit[nShaderProgramType_Pixel], "Pixel Program" );
    m_TabWidget->addTab( m_TextEdit[nShaderProgramType_Geometry], "Geometry Program" );

    m_CurrentProgramEdited = nShaderProgramType_Vertex;

    connect( m_TabWidget, SIGNAL( currentChanged( int ) ), this, SLOT( OnUITabChanged( int ) ) );

	m_LogWindow = new QListWidget( m_Frame );
    m_LogWindow->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel );
    connect( m_LogWindow, SIGNAL( itemDoubleClicked ( QListWidgetItem*) ), this, SLOT( OnUISelectError( QListWidgetItem* ) ) );

	QSplitter* splitter = new QSplitter( Qt::Vertical, m_Frame );
	splitter->addWidget( m_TabWidget );
	splitter->addWidget( m_LogWindow );
	splitter->setStretchFactor( 0, 4 );
	splitter->setStretchFactor( 1, 1 );
	QVBoxLayout *layout = new QVBoxLayout( m_Frame );

	layout->addWidget( toolBar );
	layout->addWidget( splitter );

	layout->setContentsMargins( 0, 0, 0, 0 );
	m_Frame->setLayout( layout );      // use the sizer for layout

	setWidget( m_Frame );
	resize( QSize( 800, 600 ) );

	SetShader( shader );
}