dockWidget refactoring, and added resource Widget
This commit is contained in:
parent
2f793bd15f
commit
1668101b46
@ -1,45 +1,67 @@
|
|||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "ui_mainwindow.h"
|
#include <QtCore/QVariant>
|
||||||
#include "sparrowrenderer.h"
|
#include <QtWidgets/QAction>
|
||||||
|
#include <QtWidgets/QApplication>
|
||||||
|
#include <QtWidgets/QButtonGroup>
|
||||||
|
#include <QtWidgets/QHBoxLayout>
|
||||||
|
#include <QtWidgets/QHeaderView>
|
||||||
|
#include <QtWidgets/QMainWindow>
|
||||||
|
#include <QtWidgets/QMenu>
|
||||||
|
#include <QtWidgets/QMenuBar>
|
||||||
|
#include <QtWidgets/QVBoxLayout>
|
||||||
|
#include <QtWidgets/QWidget>
|
||||||
|
#include "modulewidget.h"
|
||||||
|
#include "resourcewidget.h"
|
||||||
|
#include "myglwidget.h"
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||||
QMainWindow(parent),
|
|
||||||
ui(new Ui::MainWindow)
|
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
setWindowTitle("SparrowRenderer");
|
||||||
|
resize(800, 600);
|
||||||
|
|
||||||
|
// modules widget
|
||||||
|
moduleWidget = new ModuleWidget(this);
|
||||||
|
addDockWidget(Qt::LeftDockWidgetArea, moduleWidget);
|
||||||
|
|
||||||
|
// resources widget
|
||||||
|
resourceWidget = new ResourceWidget(this);
|
||||||
|
addDockWidget(Qt::RightDockWidgetArea, resourceWidget);
|
||||||
|
|
||||||
|
// opengl widget
|
||||||
|
openGLWidget = new OpenGLWidget(this);
|
||||||
|
openGLWidget->setRenderer(moduleWidget);
|
||||||
|
setCentralWidget(openGLWidget);
|
||||||
|
|
||||||
|
// actions
|
||||||
|
actionExit = new QAction(this);
|
||||||
|
actionExit->setText("Exit");
|
||||||
|
|
||||||
|
actionShowModuleWidget = new QAction(this);
|
||||||
|
actionShowModuleWidget->setText("Modules");
|
||||||
|
actionShowModuleWidget->setEnabled(false);
|
||||||
|
|
||||||
|
// menubar
|
||||||
|
menuBar = new QMenuBar(this);
|
||||||
|
menuBar->setGeometry(QRect(0, 0, 800, 22));
|
||||||
|
menuMenu = new QMenu(menuBar);
|
||||||
|
menuMenu->setTitle("Main menu");
|
||||||
|
menuMenu->addAction(actionShowModuleWidget);
|
||||||
|
menuMenu->addAction(actionExit);
|
||||||
|
menuBar->addAction(menuMenu->menuAction());
|
||||||
|
menuBar->setNativeMenuBar(false);
|
||||||
|
setMenuBar(menuBar);
|
||||||
|
|
||||||
|
// connect signals to slots
|
||||||
|
QObject::connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
|
||||||
|
QObject::connect(moduleWidget, SIGNAL(visibilityChanged(bool)), actionShowModuleWidget, SLOT(setDisabled(bool)));
|
||||||
|
QObject::connect(actionShowModuleWidget, SIGNAL(triggered()), this, SLOT(reopenModuleWidget()));
|
||||||
|
QObject::connect(openGLWidget, SIGNAL(modulesChanged()), moduleWidget, SLOT(updateList()));
|
||||||
|
QObject::connect(openGLWidget, SIGNAL(modulesChanged()), resourceWidget, SLOT(updateList()));
|
||||||
|
|
||||||
|
QMetaObject::connectSlotsByName(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
void MainWindow::reopenModuleWidget()
|
||||||
{
|
{
|
||||||
delete ui;
|
emit(moduleWidget->setVisible(true));
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::dockWidgetClosed()
|
|
||||||
{
|
|
||||||
emit(ui->dockWidget->setVisible(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::updateTree()
|
|
||||||
{
|
|
||||||
QTreeWidget* tree = ui->treeWidget;
|
|
||||||
SparrowRenderer* renderer = ui->openGLWidget->getRenderer();
|
|
||||||
tree->clear();
|
|
||||||
for(int i=0; i<renderer->getNbModules(); ++i)
|
|
||||||
{
|
|
||||||
std::string moduleName = renderer->getModuleName(i);
|
|
||||||
QTreeWidgetItem* item = new QTreeWidgetItem();
|
|
||||||
item->setText(0, QString(moduleName.c_str()));
|
|
||||||
tree->addTopLevelItem(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::moduleSetEnabled(QTreeWidgetItem* item, int button)
|
|
||||||
{
|
|
||||||
SparrowRenderer* renderer = ui->openGLWidget->getRenderer();
|
|
||||||
std::string name = item->text(0).toStdString();
|
|
||||||
if(renderer->isModuleEnabled(name))
|
|
||||||
renderer->disableModule(name);
|
|
||||||
else
|
|
||||||
renderer->enableModule(name);
|
|
||||||
ui->openGLWidget->updateGL();
|
|
||||||
}
|
}
|
||||||
|
19
mainwindow.h
19
mainwindow.h
@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
|
||||||
class QTreeWidgetItem;
|
class OpenGLWidget;
|
||||||
|
class ModuleWidget;
|
||||||
|
class ResourceWidget;
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
@ -15,15 +17,18 @@ class MainWindow : public QMainWindow
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MainWindow(QWidget *parent = 0);
|
explicit MainWindow(QWidget *parent = 0);
|
||||||
~MainWindow();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
QAction *actionExit;
|
||||||
|
QAction *actionShowModuleWidget;
|
||||||
|
QMenuBar *menuBar;
|
||||||
|
QMenu *menuMenu;
|
||||||
|
OpenGLWidget *openGLWidget;
|
||||||
|
ModuleWidget *moduleWidget;
|
||||||
|
ResourceWidget *resourceWidget;
|
||||||
|
|
||||||
public slots:
|
private slots:
|
||||||
void dockWidgetClosed();
|
void reopenModuleWidget();
|
||||||
void updateTree();
|
|
||||||
void moduleSetEnabled(QTreeWidgetItem* item, int button);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
202
mainwindow.ui
202
mainwindow.ui
@ -1,202 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MainWindow</class>
|
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>854</width>
|
|
||||||
<height>510</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>MainWindow</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="centralWidget">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<property name="spacing">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<widget class="MyGLWidget" name="openGLWidget"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QMenuBar" name="menuBar">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>854</width>
|
|
||||||
<height>21</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<widget class="QMenu" name="menuMenu">
|
|
||||||
<property name="title">
|
|
||||||
<string>menu</string>
|
|
||||||
</property>
|
|
||||||
<addaction name="actionShow_control_panel"/>
|
|
||||||
<addaction name="actionExit"/>
|
|
||||||
</widget>
|
|
||||||
<addaction name="menuMenu"/>
|
|
||||||
</widget>
|
|
||||||
<widget class="QDockWidget" name="dockWidget">
|
|
||||||
<attribute name="dockWidgetArea">
|
|
||||||
<number>1</number>
|
|
||||||
</attribute>
|
|
||||||
<widget class="QWidget" name="dockWidgetContents">
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<property name="spacing">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<widget class="QTreeWidget" name="treeWidget">
|
|
||||||
<column>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">rendering pipeline</string>
|
|
||||||
</property>
|
|
||||||
</column>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<action name="actionExit">
|
|
||||||
<property name="text">
|
|
||||||
<string>exit</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionShow_control_panel">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>show control panel</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
</widget>
|
|
||||||
<layoutdefault spacing="6" margin="11"/>
|
|
||||||
<customwidgets>
|
|
||||||
<customwidget>
|
|
||||||
<class>MyGLWidget</class>
|
|
||||||
<extends>QOpenGLWidget</extends>
|
|
||||||
<header>myglwidget.h</header>
|
|
||||||
<slots>
|
|
||||||
<signal>modulesChanged()</signal>
|
|
||||||
</slots>
|
|
||||||
</customwidget>
|
|
||||||
</customwidgets>
|
|
||||||
<resources/>
|
|
||||||
<connections>
|
|
||||||
<connection>
|
|
||||||
<sender>actionExit</sender>
|
|
||||||
<signal>triggered()</signal>
|
|
||||||
<receiver>MainWindow</receiver>
|
|
||||||
<slot>close()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>-1</x>
|
|
||||||
<y>-1</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>426</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>dockWidget</sender>
|
|
||||||
<signal>visibilityChanged(bool)</signal>
|
|
||||||
<receiver>actionShow_control_panel</receiver>
|
|
||||||
<slot>setDisabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>127</x>
|
|
||||||
<y>265</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>-1</x>
|
|
||||||
<y>-1</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>actionShow_control_panel</sender>
|
|
||||||
<signal>triggered()</signal>
|
|
||||||
<receiver>MainWindow</receiver>
|
|
||||||
<slot>dockWidgetClosed()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>-1</x>
|
|
||||||
<y>-1</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>426</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>openGLWidget</sender>
|
|
||||||
<signal>modulesChanged()</signal>
|
|
||||||
<receiver>MainWindow</receiver>
|
|
||||||
<slot>updateTree()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>555</x>
|
|
||||||
<y>265</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>426</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>treeWidget</sender>
|
|
||||||
<signal>itemClicked(QTreeWidgetItem*,int)</signal>
|
|
||||||
<receiver>MainWindow</receiver>
|
|
||||||
<slot>moduleSetEnabled(QTreeWidgetItem*,int)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>127</x>
|
|
||||||
<y>276</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>426</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
<slots>
|
|
||||||
<slot>dockWidgetClosed()</slot>
|
|
||||||
<slot>updateTree()</slot>
|
|
||||||
<slot>moduleSetEnabled(QTreeWidgetItem*,int)</slot>
|
|
||||||
</slots>
|
|
||||||
</ui>
|
|
33
modulewidget.cpp
Normal file
33
modulewidget.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "modulewidget.h"
|
||||||
|
#include "ui_modulewidget.h"
|
||||||
|
|
||||||
|
ModuleWidget::ModuleWidget(QWidget *parent) :
|
||||||
|
QDockWidget(parent),
|
||||||
|
ui(new Ui::ModuleWidget)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
ModuleWidget::~ModuleWidget()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModuleWidget::updateList()
|
||||||
|
{
|
||||||
|
QListWidget* list = ui->listWidget;
|
||||||
|
list->clear();
|
||||||
|
for(ModuleNode& m : modules)
|
||||||
|
list->addItem(new QListWidgetItem(QString(m.name.c_str())));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*void ModuleWidget::moduleSetEnabled(QTreeWidgetItem* item, int button)
|
||||||
|
{
|
||||||
|
SparrowRenderer* renderer = ui->openGLWidget->getRenderer();
|
||||||
|
std::string name = item->text(0).toStdString();
|
||||||
|
if(renderer->isModuleEnabled(name))
|
||||||
|
renderer->disableModule(name);
|
||||||
|
else
|
||||||
|
renderer->enableModule(name);
|
||||||
|
ui->openGLWidget->updateGL();
|
||||||
|
}*/
|
26
modulewidget.h
Normal file
26
modulewidget.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef MODULEWIDGET_H
|
||||||
|
#define MODULEWIDGET_H
|
||||||
|
|
||||||
|
#include <QDockWidget>
|
||||||
|
#include "sparrowrenderer.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class ModuleWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ModuleWidget : public QDockWidget, public SparrowRenderer
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ModuleWidget(QWidget *parent = 0);
|
||||||
|
~ModuleWidget();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::ModuleWidget *ui;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void updateList();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MODULEWIDGET_H
|
63
modulewidget.ui
Normal file
63
modulewidget.ui
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ModuleWidget</class>
|
||||||
|
<widget class="QDockWidget" name="ModuleWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>392</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="allowedAreas">
|
||||||
|
<set>Qt::LeftDockWidgetArea</set>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Modules</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="dockWidgetContents">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QListWidget" name="listWidget"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="widget" native="true">
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>157</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -20,26 +20,25 @@
|
|||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
|
|
||||||
MyGLWidget::MyGLWidget(QWidget *parent) :
|
OpenGLWidget::OpenGLWidget(QWidget *parent) :
|
||||||
QGLWidget(parent),
|
QGLWidget(parent),
|
||||||
renderer(NULL),
|
renderer(NULL),
|
||||||
controller(NULL)
|
controller(NULL)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
MyGLWidget::~MyGLWidget()
|
OpenGLWidget::~OpenGLWidget()
|
||||||
{
|
{
|
||||||
if(renderer != NULL)
|
renderer->destroyGL();
|
||||||
delete(renderer);
|
|
||||||
if(controller != NULL)
|
if(controller != NULL)
|
||||||
delete(controller);
|
delete(controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
SparrowRenderer* MyGLWidget::getRenderer()
|
void OpenGLWidget::setRenderer(SparrowRenderer* myRenderer)
|
||||||
{
|
{
|
||||||
return renderer;
|
renderer = myRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::loadResources()
|
void OpenGLWidget::loadResources()
|
||||||
{
|
{
|
||||||
std::string filenames[6] = {
|
std::string filenames[6] = {
|
||||||
"../data/skybox_ft", "../data/skybox_bk",
|
"../data/skybox_ft", "../data/skybox_bk",
|
||||||
@ -59,7 +58,7 @@ void MyGLWidget::loadResources()
|
|||||||
ResourceBase::setShader("phong", new Shader(vertSource, fragSource));
|
ResourceBase::setShader("phong", new Shader(vertSource, fragSource));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::buildScene()
|
void OpenGLWidget::buildScene()
|
||||||
{
|
{
|
||||||
// camera positionning
|
// camera positionning
|
||||||
Camera* cam = renderer->getCamera();
|
Camera* cam = renderer->getCamera();
|
||||||
@ -94,59 +93,57 @@ void MyGLWidget::buildScene()
|
|||||||
emit modulesChanged();
|
emit modulesChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::initializeGL()
|
void OpenGLWidget::initializeGL()
|
||||||
{
|
{
|
||||||
if(renderer != NULL)
|
renderer->initGL(width(), height());
|
||||||
delete(renderer);
|
|
||||||
renderer = new SparrowRenderer(width(), height());
|
|
||||||
loadResources();
|
loadResources();
|
||||||
buildScene();
|
buildScene();
|
||||||
controller = new FocusController(new glm::vec3(0));
|
controller = new FocusController(new glm::vec3(0));
|
||||||
controller->setCamera(renderer->getCamera());
|
controller->setCamera(renderer->getCamera());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::resizeGL(int width, int height)
|
void OpenGLWidget::resizeGL(int width, int height)
|
||||||
{
|
{
|
||||||
renderer->resize(width, height);
|
renderer->resize(width, height);
|
||||||
updateGL();
|
updateGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::paintGL()
|
void OpenGLWidget::paintGL()
|
||||||
{
|
{
|
||||||
renderer->render();
|
renderer->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::mouseMoveEvent(QMouseEvent *e)
|
void OpenGLWidget::mouseMoveEvent(QMouseEvent *e)
|
||||||
{
|
{
|
||||||
controller->mouseMove(e->pos().x() - last.x(), e->pos().y() - last.y());
|
controller->mouseMove(e->pos().x() - last.x(), e->pos().y() - last.y());
|
||||||
last = e->pos();
|
last = e->pos();
|
||||||
updateGL();
|
updateGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::mousePressEvent(QMouseEvent* e)
|
void OpenGLWidget::mousePressEvent(QMouseEvent* e)
|
||||||
{
|
{
|
||||||
controller->mouseEvent(e->button(), true);
|
controller->mouseEvent(e->button(), true);
|
||||||
last = e->pos();
|
last = e->pos();
|
||||||
updateGL();
|
updateGL();
|
||||||
}
|
}
|
||||||
void MyGLWidget::mouseReleaseEvent(QMouseEvent* e)
|
void OpenGLWidget::mouseReleaseEvent(QMouseEvent* e)
|
||||||
{
|
{
|
||||||
controller->mouseEvent(e->button(), false);
|
controller->mouseEvent(e->button(), false);
|
||||||
updateGL();
|
updateGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::wheelEvent(QWheelEvent *e)
|
void OpenGLWidget::wheelEvent(QWheelEvent *e)
|
||||||
{
|
{
|
||||||
controller->mouseWheelEvent(e->delta());
|
controller->mouseWheelEvent(e->delta());
|
||||||
updateGL();
|
updateGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::keyPressEvent(QKeyEvent *e)
|
void OpenGLWidget::keyPressEvent(QKeyEvent *e)
|
||||||
{
|
{
|
||||||
controller->mouseEvent(e->key(), true);
|
controller->mouseEvent(e->key(), true);
|
||||||
updateGL();
|
updateGL();
|
||||||
}
|
}
|
||||||
void MyGLWidget::keyReleaseEvent(QKeyEvent *e)
|
void OpenGLWidget::keyReleaseEvent(QKeyEvent *e)
|
||||||
{
|
{
|
||||||
controller->mouseEvent(e->key(), false);
|
controller->mouseEvent(e->key(), false);
|
||||||
updateGL();
|
updateGL();
|
||||||
|
@ -10,7 +10,7 @@ namespace Ui {
|
|||||||
class MyGLWidget;
|
class MyGLWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyGLWidget : public QGLWidget
|
class OpenGLWidget : public QGLWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -19,10 +19,9 @@ class MyGLWidget : public QGLWidget
|
|||||||
QPoint last;
|
QPoint last;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MyGLWidget(QWidget *parent = 0);
|
explicit OpenGLWidget(QWidget *parent = 0);
|
||||||
~MyGLWidget();
|
~OpenGLWidget();
|
||||||
|
void setRenderer(SparrowRenderer* myRenderer);
|
||||||
SparrowRenderer* getRenderer();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initializeGL();
|
void initializeGL();
|
||||||
|
@ -26,7 +26,7 @@ public:
|
|||||||
static Shader* getShader(const std::string &shaderName);
|
static Shader* getShader(const std::string &shaderName);
|
||||||
static Entity* getEntity(const std::string &entityName);
|
static Entity* getEntity(const std::string &entityName);
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class DataBase
|
class DataBase
|
||||||
{
|
{
|
||||||
@ -42,7 +42,10 @@ private:
|
|||||||
|
|
||||||
T* get(const std::string &name)
|
T* get(const std::string &name)
|
||||||
{
|
{
|
||||||
return data[name];
|
if(data.count(name))
|
||||||
|
return data[name];
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
76
resourcewidget.cpp
Normal file
76
resourcewidget.cpp
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#include "resourcewidget.h"
|
||||||
|
#include "ui_resourcewidget.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
ResourceWidget::ResourceWidget(QWidget *parent) :
|
||||||
|
QDockWidget(parent),
|
||||||
|
ui(new Ui::ResourceWidget)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
ui->treeWidget->resresizeColumnToContents(0);
|
||||||
|
ui->treeWidget->header()->setStretchLastSection(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
ResourceWidget::~ResourceWidget()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResourceWidget::updateList()
|
||||||
|
{
|
||||||
|
QTreeWidget* tree = ui->treeWidget;
|
||||||
|
for(QTreeWidgetItemIterator it(tree); *it; ++it)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem* item = *it;
|
||||||
|
if(item->parent())
|
||||||
|
continue;
|
||||||
|
item->setBackgroundColor(0, QColor(180, 220, 255));
|
||||||
|
item->setExpanded(true);
|
||||||
|
QString text = item->text(0);
|
||||||
|
if (text == "Textures")
|
||||||
|
{
|
||||||
|
for(std::string &name : textures.names)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
|
||||||
|
myItem->setText(0, QString(name.c_str()));
|
||||||
|
tree->addTopLevelItem(myItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(text == "Meshes")
|
||||||
|
{
|
||||||
|
for(std::string &name : meshes.names)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
|
||||||
|
myItem->setText(0, QString(name.c_str()));
|
||||||
|
tree->addTopLevelItem(myItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(text == "Materials")
|
||||||
|
{
|
||||||
|
for(std::string &name : materials.names)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
|
||||||
|
myItem->setText(0, QString(name.c_str()));
|
||||||
|
tree->addTopLevelItem(myItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(text == "Shaders")
|
||||||
|
{
|
||||||
|
for(std::string &name : shaders.names)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
|
||||||
|
myItem->setText(0, QString(name.c_str()));
|
||||||
|
tree->addTopLevelItem(myItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(text == "Entities")
|
||||||
|
{
|
||||||
|
for(std::string &name : entities.names)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
|
||||||
|
myItem->setText(0, QString(name.c_str()));
|
||||||
|
tree->addTopLevelItem(myItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
resourcewidget.h
Normal file
26
resourcewidget.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef RESOURCEWIDGET_H
|
||||||
|
#define RESOURCEWIDGET_H
|
||||||
|
|
||||||
|
#include <QDockWidget>
|
||||||
|
#include "resourcebase.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class ResourceWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ResourceWidget : public QDockWidget, public ResourceBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ResourceWidget(QWidget *parent = 0);
|
||||||
|
~ResourceWidget();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::ResourceWidget *ui;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void updateList();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // RESOURCEWIDGET_H
|
93
resourcewidget.ui
Normal file
93
resourcewidget.ui
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ResourceWidget</class>
|
||||||
|
<widget class="QDockWidget" name="ResourceWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>171</width>
|
||||||
|
<height>411</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="allowedAreas">
|
||||||
|
<set>Qt::RightDockWidgetArea</set>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Resources</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="dockWidgetContents">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeWidget" name="treeWidget">
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="autoExpandDelay">
|
||||||
|
<number>-1</number>
|
||||||
|
</property>
|
||||||
|
<property name="indentation">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
<property name="rootIsDecorated">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="headerVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerStretchLastSection">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>name</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Textures</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Meshes</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Materials</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Shaders</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Entities</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -40,7 +40,9 @@ SOURCES += main.cpp\
|
|||||||
focuscontroller.cpp \
|
focuscontroller.cpp \
|
||||||
phongmodule.cpp \
|
phongmodule.cpp \
|
||||||
skyboxmodule.cpp \
|
skyboxmodule.cpp \
|
||||||
basicmodule.cpp
|
basicmodule.cpp \
|
||||||
|
resourcewidget.cpp \
|
||||||
|
modulewidget.cpp
|
||||||
|
|
||||||
HEADERS += mainwindow.h \
|
HEADERS += mainwindow.h \
|
||||||
myglwidget.h \
|
myglwidget.h \
|
||||||
@ -64,9 +66,13 @@ HEADERS += mainwindow.h \
|
|||||||
skyboxmodule.h \
|
skyboxmodule.h \
|
||||||
basicmodule.h \
|
basicmodule.h \
|
||||||
module.h \
|
module.h \
|
||||||
resource.h
|
resource.h \
|
||||||
|
resourcewidget.h \
|
||||||
|
modulewidget.h
|
||||||
|
|
||||||
FORMS += mainwindow.ui
|
FORMS += \
|
||||||
|
resourcewidget.ui \
|
||||||
|
modulewidget.ui
|
||||||
|
|
||||||
OTHER_FILES += *.frag *.vert *.glsl *.todo
|
OTHER_FILES += *.frag *.vert *.glsl *.todo
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
// main methods
|
// main methods
|
||||||
|
|
||||||
SparrowRenderer::SparrowRenderer(int width, int height) : camera(width, height)
|
void SparrowRenderer::initGL(int width, int height)
|
||||||
{
|
{
|
||||||
glewExperimental = GL_TRUE;
|
glewExperimental = GL_TRUE;
|
||||||
GLenum err = glewInit();
|
GLenum err = glewInit();
|
||||||
@ -30,7 +30,12 @@ SparrowRenderer::SparrowRenderer(int width, int height) : camera(width, height)
|
|||||||
glAssert(glEnable(GL_DEPTH_TEST));
|
glAssert(glEnable(GL_DEPTH_TEST));
|
||||||
glAssert(glEnable(GL_CULL_FACE));
|
glAssert(glEnable(GL_CULL_FACE));
|
||||||
glAssert(glEnable(GL_TEXTURE_2D));
|
glAssert(glEnable(GL_TEXTURE_2D));
|
||||||
glAssert(glViewport(0, 0, width, height));
|
resize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SparrowRenderer::destroyGL()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparrowRenderer::resize(int width, int height)
|
void SparrowRenderer::resize(int width, int height)
|
||||||
|
@ -9,22 +9,10 @@ class Module;
|
|||||||
|
|
||||||
class SparrowRenderer
|
class SparrowRenderer
|
||||||
{
|
{
|
||||||
typedef struct s_moduleNode{
|
|
||||||
Module* module;
|
|
||||||
std::string name;
|
|
||||||
bool isEnabled;
|
|
||||||
|
|
||||||
s_moduleNode(Module* myModule, const std::string &myName) : module(myModule), name(myName), isEnabled(true) {}
|
|
||||||
} ModuleNode;
|
|
||||||
|
|
||||||
std::list<ModuleNode>::iterator getModuleNode(std::string name);
|
|
||||||
|
|
||||||
Camera camera;
|
|
||||||
std::list<ModuleNode> modules;
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// main methods
|
// main methods
|
||||||
SparrowRenderer(int width, int height);
|
void initGL(int width, int height);
|
||||||
|
void destroyGL();
|
||||||
void resize(int width, int height);
|
void resize(int width, int height);
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
@ -46,6 +34,20 @@ public:
|
|||||||
|
|
||||||
// camera methods
|
// camera methods
|
||||||
Camera* getCamera();
|
Camera* getCamera();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
typedef struct s_moduleNode{
|
||||||
|
Module* module;
|
||||||
|
std::string name;
|
||||||
|
bool isEnabled;
|
||||||
|
|
||||||
|
s_moduleNode(Module* myModule, const std::string &myName) : module(myModule), name(myName), isEnabled(true) {}
|
||||||
|
} ModuleNode;
|
||||||
|
|
||||||
|
Camera camera;
|
||||||
|
std::list<ModuleNode> modules;
|
||||||
|
|
||||||
|
std::list<ModuleNode>::iterator getModuleNode(std::string name);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SPARROWRENDERER_H
|
#endif // SPARROWRENDERER_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user