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(); }
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 ); }