Test integrating a Qt app into a DFHack plugin. It was a success!
@ -0,0 +1,39 @@
|
|||||||
|
find_package(Qt4 QUIET)
|
||||||
|
find_package(OpenGL QUIET)
|
||||||
|
|
||||||
|
if(QT4_FOUND AND OPENGL_FOUND AND OPENGL_GLU_FOUND)
|
||||||
|
IF(QT_VERSION_MAJOR MATCHES 4 AND QT_VERSION_MINOR GREATER 6)
|
||||||
|
set( QT_USE_QTGUI TRUE )
|
||||||
|
set( QT_USE_QTOPENGL TRUE )
|
||||||
|
INCLUDE( ${QT_USE_FILE} )
|
||||||
|
|
||||||
|
include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
|
set ( qtplug_SRCS
|
||||||
|
qtplug.cpp
|
||||||
|
blankslade.cpp
|
||||||
|
glwidget.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
SET ( qtplug_UI
|
||||||
|
gui/main.ui
|
||||||
|
)
|
||||||
|
|
||||||
|
SET( qtplug_RCS
|
||||||
|
gui/resources.qrc
|
||||||
|
)
|
||||||
|
|
||||||
|
# this command will generate rules that will run rcc on all files from blankslade_RCS
|
||||||
|
# in result blankslade_RC_SRCS variable will contain paths to files produced by rcc
|
||||||
|
QT4_ADD_RESOURCES( qtplug_RC_SRCS ${qtplug_RCS} )
|
||||||
|
|
||||||
|
QT4_WRAP_UI(qtplug_UI_h ${qtplug_UI})
|
||||||
|
qt4_automoc(${qtplug_SRCS})
|
||||||
|
DFHACK_PLUGIN(qtplug ${qtplug_SRCS} ${qtplug_RC_SRCS} ${qtplug_UI_h})
|
||||||
|
target_link_libraries(qtplug ${OPENGL_LIBRARIES} ${QT_LIBRARIES} )
|
||||||
|
ELSE(QT_VERSION_MAJOR MATCHES 4 AND QT_VERSION_MINOR GREATER 6)
|
||||||
|
MESSAGE(STATUS "Can't build the Qt plugin. Your Qt is too old.")
|
||||||
|
ENDIF(QT_VERSION_MAJOR MATCHES 4 AND QT_VERSION_MINOR GREATER 6)
|
||||||
|
else(QT4_FOUND AND OPENGL_FOUND AND OPENGL_GLU_FOUND)
|
||||||
|
MESSAGE(STATUS "Required libraries (Qt, GL, GLU) not found - Qt plugin can't be built.")
|
||||||
|
endif(QT4_FOUND AND OPENGL_FOUND AND OPENGL_GLU_FOUND)
|
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Petr Mrázek (peterix)
|
||||||
|
* See LICENSE for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "blankslade.h"
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QDebug>
|
||||||
|
#include "glwidget.h"
|
||||||
|
|
||||||
|
blankslade::blankslade(QWidget *parent): QMainWindow(parent)
|
||||||
|
{
|
||||||
|
ui.setupUi(this);
|
||||||
|
GLWidget * glw = new GLWidget();
|
||||||
|
ui.gridding->addWidget(glw);
|
||||||
|
connect(ui.actionOpen,SIGNAL(triggered(bool)),this,SLOT(slotOpen(bool)));
|
||||||
|
connect(ui.actionQuit,SIGNAL(triggered(bool)),this,SLOT(slotQuit(bool)));
|
||||||
|
connect(ui.actionSave,SIGNAL(triggered(bool)),this,SLOT(slotSave(bool)));
|
||||||
|
connect(ui.actionSave_As,SIGNAL(triggered(bool)),this,SLOT(slotSaveAs(bool)));
|
||||||
|
ui.actionOpen->setIcon(QIcon::fromTheme("document-open"));
|
||||||
|
ui.actionOpen->setIconText(tr("Open"));
|
||||||
|
ui.actionSave->setIcon(QIcon::fromTheme("document-save"));
|
||||||
|
ui.actionSave->setIconText(tr("Save"));
|
||||||
|
ui.actionSave_As->setIcon(QIcon::fromTheme("document-save-as"));
|
||||||
|
ui.actionSave_As->setIconText(tr("Save As"));
|
||||||
|
ui.actionQuit->setIcon(QIcon::fromTheme("application-exit"));
|
||||||
|
ui.actionQuit->setIconText(tr("Run DF"));
|
||||||
|
}
|
||||||
|
|
||||||
|
blankslade::~blankslade()
|
||||||
|
{}
|
||||||
|
|
||||||
|
void blankslade::slotOpen(bool )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
QFileDialog fd(this,tr("Locate the Memoxy.xml file"));
|
||||||
|
fd.setNameFilter(tr("Memory definition (*.xml)"));
|
||||||
|
fd.setFileMode(QFileDialog::ExistingFile);
|
||||||
|
fd.setAcceptMode(QFileDialog::AcceptOpen);
|
||||||
|
int result = fd.exec();
|
||||||
|
if(result == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
QStringList files = fd.selectedFiles();
|
||||||
|
QString fileName = files[0];
|
||||||
|
QDomDocument doc("memxml");
|
||||||
|
QFile file(fileName);
|
||||||
|
if(!file.open(QIODevice::ReadOnly))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!doc.setContent(&file))
|
||||||
|
{
|
||||||
|
file.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mod = new MemXMLModel(doc,this);
|
||||||
|
ui.entryView->setModel(mod);
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void blankslade::slotQuit(bool )
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void blankslade::slotSave(bool )
|
||||||
|
{
|
||||||
|
// blah
|
||||||
|
}
|
||||||
|
|
||||||
|
void blankslade::slotRunDF(bool )
|
||||||
|
{
|
||||||
|
// blah
|
||||||
|
}
|
||||||
|
|
||||||
|
void blankslade::slotSaveAs(bool )
|
||||||
|
{
|
||||||
|
QFileDialog fd(this,tr("Choose file to save as..."));
|
||||||
|
fd.setNameFilter(tr("Memory definition (*.xml)"));
|
||||||
|
fd.setFileMode(QFileDialog::AnyFile);
|
||||||
|
fd.selectFile("Memory.xml");
|
||||||
|
fd.setAcceptMode(QFileDialog::AcceptSave);
|
||||||
|
int result = fd.exec();
|
||||||
|
if(result == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
QStringList files = fd.selectedFiles();
|
||||||
|
QString file = files[0];
|
||||||
|
qDebug() << "File:" << file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void blankslade::slotSetupDFs(bool )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "blankslade.moc"
|
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Petr Mrázek (peterix)
|
||||||
|
* See LICENSE for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef blankslade_H
|
||||||
|
#define blankslade_H
|
||||||
|
|
||||||
|
#include <QtGui/QMainWindow>
|
||||||
|
#include "ui_main.h"
|
||||||
|
|
||||||
|
class blankslade : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
blankslade(QWidget *parent = 0);
|
||||||
|
virtual ~blankslade();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow ui;
|
||||||
|
public slots:
|
||||||
|
void slotOpen(bool);
|
||||||
|
void slotQuit(bool);
|
||||||
|
void slotSave(bool);
|
||||||
|
void slotSaveAs(bool);
|
||||||
|
void slotRunDF(bool);
|
||||||
|
void slotSetupDFs(bool);
|
||||||
|
};
|
||||||
|
#endif // blankslade_H
|
@ -0,0 +1,245 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Petr Mrázek (peterix)
|
||||||
|
* See LICENSE for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glwidget.h"
|
||||||
|
#include <QtOpenGL>
|
||||||
|
#include <QGLBuffer>
|
||||||
|
#include <QGLShaderProgram>
|
||||||
|
#include <QGLPixelBuffer>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
struct Vertex
|
||||||
|
{
|
||||||
|
float texcoord[2];
|
||||||
|
float color[3];
|
||||||
|
float position[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FRS 0.0625
|
||||||
|
#define FRX FRS/2
|
||||||
|
|
||||||
|
// this is crap
|
||||||
|
const Vertex house_vert[] =
|
||||||
|
{
|
||||||
|
// walls
|
||||||
|
{ { 0.0, 0.0 }, { 0.0, 0.0, 1.0 }, { -4.0, -4.0, -4.0 } },
|
||||||
|
{ { 0.0, FRS }, { 0.0, 1.0, 0.0 }, { -4.0, -4.0, 4.0 } },
|
||||||
|
{ { FRS, FRS }, { 0.0, 1.0, 1.0 }, { 4.0, -4.0, 4.0 } },
|
||||||
|
{ { FRS, 0.0 }, { 1.0, 0.0, 0.0 }, { 4.0, -4.0, -4.0 } },
|
||||||
|
|
||||||
|
{ { 0.0, 0.0 }, { 1.0, 0.0, 1.0 }, { -4.0, 4.0, -4.0 } },
|
||||||
|
{ { 0.0, FRS }, { 1.0, 1.0, 0.0 }, { -4.0, 4.0, 4.0 } },
|
||||||
|
{ { FRS, FRS }, { 1.0, 1.0, 1.0 }, { 4.0, 4.0, 4.0 } },
|
||||||
|
{ { FRS, 0.0 }, { 0.0, 0.0, 1.0 }, { 4.0, 4.0, -4.0 } },
|
||||||
|
|
||||||
|
{ { 0.0, 0.0 }, { 0.0, 1.0, 0.0 }, { -4.0, -4.0, -4.0 } },
|
||||||
|
{ { 0.0, FRS }, { 0.0, 1.0, 1.0 }, { -4.0, -4.0, 4.0 } },
|
||||||
|
{ { FRS, FRS }, { 1.0, 0.0, 0.0 }, { -4.0, 4.0, 4.0 } },
|
||||||
|
{ { FRS, 0.0 }, { 1.0, 0.0, 1.0 }, { -4.0, 4.0, -4.0 } },
|
||||||
|
|
||||||
|
{ { 0.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 4.0, -4.0, -4.0 } },
|
||||||
|
{ { 0.0, FRS }, { 0.0, 1.0, 1.0 }, { 4.0, -4.0, 4.0 } },
|
||||||
|
{ { FRS, FRS }, { 1.0, 0.0, 0.0 }, { 4.0, 4.0, 4.0 } },
|
||||||
|
{ { FRS, 0.0 }, { 1.0, 0.0, 1.0 }, { 4.0, 4.0, -4.0 } },
|
||||||
|
// roof
|
||||||
|
{ { 0.0, 0.0 }, { 0.0, 0.0, 1.0 }, { -4.0, 4.0, -4.0 } },
|
||||||
|
{ { FRS, 0.0 }, { 0.0, 1.0, 1.0 }, { 4.0, 4.0, -4.0 } },
|
||||||
|
{ { FRX, FRX }, { 1.0, 1.0, 1.0 }, { 0.0, 9.0, 0.0 } },
|
||||||
|
|
||||||
|
{ { FRS, 0.0 }, { 1.0, 0.0, 0.0 }, { 4.0, 4.0, -4.0 } },
|
||||||
|
{ { FRS, FRS }, { 1.0, 1.0, 0.0 }, { 4.0, 4.0, 4.0 } },
|
||||||
|
{ { FRX, FRX }, { 1.0, 1.0, 1.0 }, { 0.0, 9.0, 0.0 } },
|
||||||
|
|
||||||
|
{ { FRS, FRS }, { 0.0, 1.0, 0.0 }, { 4.0, 4.0, 4.0 } },
|
||||||
|
{ { 0.0, FRS }, { 0.0, 1.0, 1.0 }, { -4.0, 4.0, 4.0 } },
|
||||||
|
{ { FRX, FRX }, { 1.0, 1.0, 1.0 }, { 0.0, 9.0, 0.0 } },
|
||||||
|
|
||||||
|
{ { 0.0, FRS }, { 0.0, 1.0, 0.0 }, { -4.0, 4.0, 4.0 } },
|
||||||
|
{ { 0.0, 0.0 }, { 1.0, 1.0, 0.0 }, { -4.0, 4.0, -4.0 } },
|
||||||
|
{ { FRX, FRX }, { 1.0, 1.0, 1.0 }, { 0.0, 9.0, 0.0 } }
|
||||||
|
};
|
||||||
|
|
||||||
|
const unsigned char house_idx[] =
|
||||||
|
{
|
||||||
|
// walls
|
||||||
|
0, 1, 2, 0, 2, 3,
|
||||||
|
4, 5, 6, 4, 6, 7,
|
||||||
|
8, 9, 10, 8, 10, 11,
|
||||||
|
12, 13, 14, 12, 14, 15,
|
||||||
|
// roof
|
||||||
|
16, 17, 18,
|
||||||
|
19, 20, 21,
|
||||||
|
22, 23, 24,
|
||||||
|
25, 26, 27
|
||||||
|
};
|
||||||
|
|
||||||
|
class GLWPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QGLBuffer *VBO;
|
||||||
|
QGLBuffer *EBO;
|
||||||
|
QGLShaderProgram prog;
|
||||||
|
int positionAttrib;
|
||||||
|
int colorAttrib;
|
||||||
|
int texcoordsAttrib;
|
||||||
|
int mvpUniform;
|
||||||
|
int textureUniform;
|
||||||
|
int terrain;
|
||||||
|
float pz,rx,ry;
|
||||||
|
QPoint lastMouse;
|
||||||
|
};
|
||||||
|
|
||||||
|
GLWidget::GLWidget()
|
||||||
|
{
|
||||||
|
d = new GLWPrivate;
|
||||||
|
d->pz = -140.0f;
|
||||||
|
d->rx = d->ry = 0.0f;
|
||||||
|
d->VBO = d->EBO = 0;
|
||||||
|
startTimer( 10 );
|
||||||
|
}
|
||||||
|
|
||||||
|
GLWidget::~GLWidget()
|
||||||
|
{
|
||||||
|
if(d->VBO) delete d->VBO;
|
||||||
|
if(d->EBO) delete d->EBO;
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * VS_src =
|
||||||
|
"#version 130\n"
|
||||||
|
"in vec3 position; in vec3 color; uniform mat4 mvp; out vec3 c;"
|
||||||
|
"in vec2 tc_in; out vec2 coord;"
|
||||||
|
"void main()"
|
||||||
|
"{"
|
||||||
|
"gl_Position = mvp*vec4(position,1);"
|
||||||
|
"c = color;"
|
||||||
|
"coord = tc_in;"
|
||||||
|
"}";
|
||||||
|
|
||||||
|
const char * FS_src =
|
||||||
|
"#version 130\n"
|
||||||
|
"in vec3 c;"
|
||||||
|
//"out vec4 gl_FragColor;"
|
||||||
|
"in vec2 coord; uniform sampler2D tex;"
|
||||||
|
"void main()"
|
||||||
|
"{"
|
||||||
|
// "gl_FragColor = vec4(c,1);"
|
||||||
|
// "gl_FragColor = mix( texture(tex, coord), vec4(c,1), 0.5);"
|
||||||
|
// "gl_FragColor = vec4(c,1) - texture(tex, coord);"
|
||||||
|
"gl_FragColor = vec4(c,1) * texture(tex, coord);"
|
||||||
|
"}";
|
||||||
|
|
||||||
|
//initialization of OpenGL
|
||||||
|
void GLWidget::initializeGL()
|
||||||
|
{
|
||||||
|
bool test = 1;
|
||||||
|
test &= d->prog.addShaderFromSourceCode(QGLShader::Vertex,VS_src);
|
||||||
|
test &= d->prog.addShaderFromSourceCode(QGLShader::Fragment,FS_src);
|
||||||
|
test &= d->prog.link();
|
||||||
|
if(!test)
|
||||||
|
std::cout << "OUCH!" << std::endl;
|
||||||
|
|
||||||
|
d->positionAttrib = d->prog.attributeLocation("position");
|
||||||
|
d->colorAttrib = d->prog.attributeLocation("color");
|
||||||
|
d->texcoordsAttrib = d->prog.attributeLocation("tc_in");
|
||||||
|
|
||||||
|
d->mvpUniform = d->prog.uniformLocation("mvp");
|
||||||
|
d->textureUniform = d->prog.uniformLocation("tex");
|
||||||
|
|
||||||
|
if(d->positionAttrib == -1 || d->colorAttrib == -1 || d->mvpUniform == -1)
|
||||||
|
std::cout << "Bad attribs!" << std::endl;
|
||||||
|
|
||||||
|
QGLBuffer &VBO = *(d->VBO = new QGLBuffer(QGLBuffer::VertexBuffer));
|
||||||
|
VBO.create();
|
||||||
|
VBO.bind();
|
||||||
|
VBO.allocate(sizeof(house_vert));
|
||||||
|
VBO.write(0,house_vert,sizeof(house_vert));
|
||||||
|
|
||||||
|
QGLBuffer &EBO = *(d->EBO = new QGLBuffer(QGLBuffer::IndexBuffer));
|
||||||
|
EBO.create();
|
||||||
|
EBO.bind();
|
||||||
|
EBO.allocate(sizeof(house_idx));
|
||||||
|
EBO.write(0,house_idx,sizeof(house_idx));
|
||||||
|
|
||||||
|
QImage texture;
|
||||||
|
texture.load("terrain.png");
|
||||||
|
d->terrain = bindTexture(texture);
|
||||||
|
|
||||||
|
glClearColor(0.0f, 0.0f, 0.0f, 0.f);
|
||||||
|
|
||||||
|
glShadeModel( GL_SMOOTH );
|
||||||
|
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
|
||||||
|
glEnable( GL_TEXTURE_2D );
|
||||||
|
glEnable( GL_DEPTH_TEST );
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLWidget::paintGL()
|
||||||
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
d->prog.bind();
|
||||||
|
|
||||||
|
QMatrix4x4 projection;
|
||||||
|
QMatrix4x4 mvp;
|
||||||
|
|
||||||
|
//projection.ortho(-10,10,-10,10,1,1000);
|
||||||
|
float aspect = (float)width()/(float)height();
|
||||||
|
projection.perspective(10,aspect,1,1000);
|
||||||
|
mvp = projection;
|
||||||
|
|
||||||
|
mvp.translate(0,0,d->pz);
|
||||||
|
mvp.rotate(d->ry,1,0,0);
|
||||||
|
mvp.rotate(d->rx,0,1,0);
|
||||||
|
d->prog.setUniformValue(d->mvpUniform,mvp);
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, d->terrain);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
d->prog.setUniformValue(d->textureUniform,0);
|
||||||
|
|
||||||
|
d->prog.enableAttributeArray(d->positionAttrib);
|
||||||
|
d->prog.enableAttributeArray(d->colorAttrib);
|
||||||
|
d->prog.enableAttributeArray(d->texcoordsAttrib);
|
||||||
|
|
||||||
|
d->VBO->bind();
|
||||||
|
|
||||||
|
d->prog.setAttributeBuffer(d->texcoordsAttrib, GL_FLOAT, offsetof(Vertex, texcoord), 2, sizeof(Vertex));
|
||||||
|
d->prog.setAttributeBuffer(d->positionAttrib, GL_FLOAT, offsetof(Vertex, position), 3, sizeof(Vertex));
|
||||||
|
d->prog.setAttributeBuffer(d->colorAttrib, GL_FLOAT, offsetof(Vertex, color), 3, sizeof(Vertex));
|
||||||
|
|
||||||
|
d->EBO->bind();
|
||||||
|
|
||||||
|
glDrawElements(GL_TRIANGLES, d->EBO->size(), GL_UNSIGNED_BYTE, NULL);
|
||||||
|
|
||||||
|
d->prog.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLWidget::resizeGL(int width, int height)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLWidget::mousePressEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
d->lastMouse = event->pos();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLWidget::mouseMoveEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
int dx = event->x() - d->lastMouse.x();
|
||||||
|
int dy = event->y() - d->lastMouse.y();
|
||||||
|
|
||||||
|
if (event->buttons() & Qt::LeftButton)
|
||||||
|
{
|
||||||
|
d->rx = d->rx + dx;
|
||||||
|
d->ry = d->ry + dy;
|
||||||
|
}
|
||||||
|
d->lastMouse = event->pos();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLWidget::timerEvent(QTimerEvent *event)
|
||||||
|
{
|
||||||
|
updateGL();
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Petr Mrázek (peterix)
|
||||||
|
* See LICENSE for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GLWIDGET_H
|
||||||
|
#define GLWIDGET_H
|
||||||
|
|
||||||
|
#include <QGLWidget>
|
||||||
|
|
||||||
|
class GLWPrivate;
|
||||||
|
class GLWidget : public QGLWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GLWidget();
|
||||||
|
~GLWidget();
|
||||||
|
|
||||||
|
float rot;
|
||||||
|
void resizeGL(int width, int height);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void initializeGL();
|
||||||
|
void paintGL();
|
||||||
|
void mousePressEvent(QMouseEvent *event);
|
||||||
|
void mouseMoveEvent(QMouseEvent *event);
|
||||||
|
void timerEvent(QTimerEvent *event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
GLWPrivate * d;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GLWIDGET_H
|
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 6.2 KiB |
@ -0,0 +1,361 @@
|
|||||||
|
<?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>662</width>
|
||||||
|
<height>836</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<property name="windowIcon">
|
||||||
|
<iconset resource="resources.qrc">
|
||||||
|
<normaloff>:/main_icon/main_64.png</normaloff>:/main_icon/main_64.png</iconset>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<layout class="QGridLayout" name="gridding">
|
||||||
|
<property name="margin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
<widget class="QDockWidget" name="scene_dock">
|
||||||
|
<property name="features">
|
||||||
|
<set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
|
||||||
|
</property>
|
||||||
|
<property name="allowedAreas">
|
||||||
|
<set>Qt::RightDockWidgetArea</set>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Scéna</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="dockWidgetArea">
|
||||||
|
<number>2</number>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QWidget" name="dockWidgetContents_2">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Exponent n</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QSlider" name="slideExponentN">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="spinExponentN"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Exponent e</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QSlider" name="slideExponentE">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="spinExponentE"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QDial" name="dialLight"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Světlo</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Objekt</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QDial" name="dial_2"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>Textura</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>1</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>96</width>
|
||||||
|
<height>96</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="baseSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="resources.qrc">
|
||||||
|
<normaloff>:/blah/tileable.jpg</normaloff>:/blah/tileable.jpg</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>80</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="default">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Render</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
<zorder>pushButton_2</zorder>
|
||||||
|
<zorder>verticalLayoutWidget</zorder>
|
||||||
|
<zorder>pushButton</zorder>
|
||||||
|
<zorder>gridLayoutWidget</zorder>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDockWidget" name="dock_example">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="features">
|
||||||
|
<set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
|
||||||
|
</property>
|
||||||
|
<property name="allowedAreas">
|
||||||
|
<set>Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::TopDockWidgetArea</set>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Ukázky</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="dockWidgetArea">
|
||||||
|
<number>1</number>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QWidget" name="dockWidgetContents_3">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QListWidget" name="listWidget">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Sunken</enum>
|
||||||
|
</property>
|
||||||
|
<property name="lineWidth">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="selectionBehavior">
|
||||||
|
<enum>QAbstractItemView::SelectItems</enum>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="movement">
|
||||||
|
<enum>QListView::Static</enum>
|
||||||
|
</property>
|
||||||
|
<property name="flow">
|
||||||
|
<enum>QListView::TopToBottom</enum>
|
||||||
|
</property>
|
||||||
|
<property name="isWrapping" stdset="0">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="resizeMode">
|
||||||
|
<enum>QListView::Adjust</enum>
|
||||||
|
</property>
|
||||||
|
<property name="layoutMode">
|
||||||
|
<enum>QListView::SinglePass</enum>
|
||||||
|
</property>
|
||||||
|
<property name="spacing">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<property name="viewMode">
|
||||||
|
<enum>QListView::ListMode</enum>
|
||||||
|
</property>
|
||||||
|
<property name="uniformItemSizes">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="selectionRectVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sortingEnabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Koule</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="resources.qrc">
|
||||||
|
<normaloff>:/blah/koule.png</normaloff>:/blah/koule.png</iconset>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Krychle</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="resources.qrc">
|
||||||
|
<normaloff>:/blah/krychle.png</normaloff>:/blah/krychle.png</iconset>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Válec</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="resources.qrc">
|
||||||
|
<normaloff>:/blah/valec.png</normaloff>:/blah/valec.png</iconset>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Diamant</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="resources.qrc">
|
||||||
|
<normaloff>:/blah/diamant.png</normaloff>:/blah/diamant.png</iconset>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>a=3,b=3</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="resources.qrc">
|
||||||
|
<normaloff>:/blah/33.png</normaloff>:/blah/33.png</iconset>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<action name="actionOpen">
|
||||||
|
<property name="text">
|
||||||
|
<string>Open</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSave">
|
||||||
|
<property name="text">
|
||||||
|
<string>Save</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSave_As">
|
||||||
|
<property name="text">
|
||||||
|
<string>Save As</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionQuit">
|
||||||
|
<property name="text">
|
||||||
|
<string>Quit</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<resources>
|
||||||
|
<include location="resources.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
After Width: | Height: | Size: 616 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.8 KiB |
@ -0,0 +1,15 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="main_icon">
|
||||||
|
<file>main_64.png</file>
|
||||||
|
<file>main_16.png</file>
|
||||||
|
<file>main_32.png</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="blah">
|
||||||
|
<file>tileable.jpg</file>
|
||||||
|
<file>33.png</file>
|
||||||
|
<file>diamant.png</file>
|
||||||
|
<file>koule.png</file>
|
||||||
|
<file>krychle.png</file>
|
||||||
|
<file>valec.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
After Width: | Height: | Size: 308 KiB |
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,70 @@
|
|||||||
|
#include <dfhack/Core.h>
|
||||||
|
#include <dfhack/Console.h>
|
||||||
|
#include <dfhack/Export.h>
|
||||||
|
#include <dfhack/PluginManager.h>
|
||||||
|
#include <dfhack/modules/Maps.h>
|
||||||
|
#include <dfhack/modules/Gui.h>
|
||||||
|
#include <dfhack/extra/MapExtras.h>
|
||||||
|
#include <vector>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <stack>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <QtGui/QApplication>
|
||||||
|
#include "blankslade.h"
|
||||||
|
|
||||||
|
using std::vector;
|
||||||
|
using std::string;
|
||||||
|
using std::stack;
|
||||||
|
using namespace DFHack;
|
||||||
|
static int runnable(void *);
|
||||||
|
static SDL::Mutex * instance_mutex = 0;
|
||||||
|
static bool running = false;
|
||||||
|
|
||||||
|
DFhackCExport command_result runqt (Core * c, vector <string> & parameters);
|
||||||
|
|
||||||
|
DFhackCExport const char * plugin_name ( void )
|
||||||
|
{
|
||||||
|
return "Qt Test";
|
||||||
|
}
|
||||||
|
|
||||||
|
DFhackCExport command_result plugin_init ( Core * c, std::vector <PluginCommand> &commands)
|
||||||
|
{
|
||||||
|
instance_mutex = SDL_CreateMutex();
|
||||||
|
commands.clear();
|
||||||
|
commands.push_back(PluginCommand("runqt","Open an interactive Qt gui.",runqt));
|
||||||
|
return CR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
DFhackCExport command_result plugin_shutdown ( Core * c )
|
||||||
|
{
|
||||||
|
return CR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
DFhackCExport command_result runqt (Core * c, vector <string> & parameters)
|
||||||
|
{
|
||||||
|
SDL_mutexP(instance_mutex);
|
||||||
|
if(!running)
|
||||||
|
{
|
||||||
|
running = true;
|
||||||
|
SDL::Thread * IO = SDL_CreateThread(runnable, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
c->con.printerr("The Qt test plugin is already running!\n");
|
||||||
|
}
|
||||||
|
SDL_mutexV(instance_mutex);
|
||||||
|
return CR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int runnable(void *)
|
||||||
|
{
|
||||||
|
QApplication app(0, 0);
|
||||||
|
blankslade appGui;
|
||||||
|
appGui.show();
|
||||||
|
int ret = app.exec();
|
||||||
|
SDL_mutexP(instance_mutex);
|
||||||
|
running = false;
|
||||||
|
SDL_mutexV(instance_mutex);
|
||||||
|
return ret;
|
||||||
|
}
|