]> git.cworth.org Git - vogl/blob - src/vogleditor/vogleditor_qshaderexplorer.cpp
Initial vogl checkin
[vogl] / src / vogleditor / vogleditor_qshaderexplorer.cpp
1 #include "vogleditor_qshaderexplorer.h"
2 #include "ui_vogleditor_qshaderexplorer.h"
3
4 #include "vogl_gl_object.h"
5 #include "vogl_shader_state.h"
6
7 Q_DECLARE_METATYPE(vogl_shader_state*);
8
9 vogleditor_QShaderExplorer::vogleditor_QShaderExplorer(QWidget *parent) :
10     QWidget(parent),
11     ui(new Ui::vogleditor_QShaderExplorer)
12 {
13     ui->setupUi(this);
14 }
15
16 vogleditor_QShaderExplorer::~vogleditor_QShaderExplorer()
17 {
18     delete ui;
19 }
20
21 void vogleditor_QShaderExplorer::clear()
22 {
23     ui->shaderListbox->clear();
24     ui->shaderTextEdit->clear();
25 }
26
27 void vogleditor_QShaderExplorer::set_shader_objects(vogl_gl_object_state_ptr_vec objects)
28 {
29     clear();
30     m_objects = objects;
31
32     for (vogl_gl_object_state_ptr_vec::iterator iter = objects.begin(); iter != objects.end(); iter++)
33     {
34         if ((*iter)->get_type() == cGLSTShader)
35         {
36             vogl_shader_state* pState = static_cast<vogl_shader_state*>(*iter);
37
38             QString valueStr;
39             valueStr = valueStr.sprintf("Shader %" PRIu64 " - %s", pState->get_snapshot_handle(), g_gl_enums.find_gl_name(pState->get_shader_type()));
40
41             ui->shaderListbox->addItem(valueStr, QVariant::fromValue(pState));
42         }
43         else
44         {
45             VOGL_ASSERT(!"Unhandled object type in vogleditor_QShaderExplorer");
46         }
47     }
48 }
49
50
51 bool vogleditor_QShaderExplorer::set_active_shader(unsigned long long shaderHandle)
52 {
53     bool bActivated = false;
54     int index = 0;
55     for (vogl_gl_object_state_ptr_vec::iterator iter = m_objects.begin(); iter != m_objects.end(); iter++)
56     {
57         vogl_shader_state* pState = static_cast<vogl_shader_state*>(*iter);
58         if (pState->get_snapshot_handle() == shaderHandle)
59         {
60             ui->shaderListbox->setCurrentIndex(index);
61             bActivated = true;
62             break;
63         }
64
65         ++index;
66     }
67     return bActivated;
68 }
69
70 void vogleditor_QShaderExplorer::on_shaderListbox_currentIndexChanged(int index)
71 {
72     ui->shaderTextEdit->clear();
73
74     int count = ui->shaderListbox->count();
75     if (index >= 0 && index < count)
76     {
77         vogl_shader_state* pObjState = ui->shaderListbox->itemData(index).value<vogl_shader_state*>();
78         if (pObjState == NULL)
79         {
80             VOGL_ASSERT(!"NULL shader object type in vogleditor_QShaderExplorer");
81             return;
82         }
83
84         ui->shaderTextEdit->setText(pObjState->get_source().c_str());
85     }
86 }