]> git.cworth.org Git - vogl/blob - src/vogleditor/vogleditor_statetreeshaderitem.h
Initial vogl checkin
[vogl] / src / vogleditor / vogleditor_statetreeshaderitem.h
1 #ifndef VOGLEDITOR_STATETREESHADERITEM_H
2 #define VOGLEDITOR_STATETREESHADERITEM_H
3
4 #include "vogleditor_statetreeitem.h"
5
6 class vogl_shader_state;
7
8
9 class vogleditor_stateTreeShaderDiffableItem : public vogleditor_stateTreeItem
10 {
11 public:
12     vogleditor_stateTreeShaderDiffableItem(QString name, QString value, vogleditor_stateTreeItem* parent, const vogl_shader_state& state)
13         : vogleditor_stateTreeItem(name, value, parent),
14           m_pState(&state),
15           m_pDiffBaseState(NULL)
16     {
17     }
18
19     void set_diff_base_state(const vogl_shader_state* pBaseState)
20     {
21         m_pDiffBaseState = pBaseState;
22     }
23
24     const vogl_shader_state* get_current_state() const { return m_pState; }
25     const vogl_shader_state* get_base_state() const { return m_pDiffBaseState; }
26
27     virtual bool hasChanged() const = 0;
28
29 protected:
30     const vogl_shader_state* m_pState;
31     const vogl_shader_state* m_pDiffBaseState;
32 };
33
34 class vogleditor_stateTreeShaderBoolItem : public vogleditor_stateTreeShaderDiffableItem
35 {
36 public:
37     vogleditor_stateTreeShaderBoolItem(QString name, bool (vogl_shader_state::* func)(void) const, vogleditor_stateTreeItem* parent, const vogl_shader_state& state);
38     virtual ~vogleditor_stateTreeShaderBoolItem() { m_pState = NULL; }
39
40     virtual bool hasChanged() const;
41     virtual QString getDiffedValue() const;
42
43 private:
44     bool (vogl_shader_state::* m_pFunc)(void) const;
45 };
46
47 class vogleditor_stateTreeShaderLogItem : public vogleditor_stateTreeShaderDiffableItem
48 {
49 public:
50     vogleditor_stateTreeShaderLogItem(QString name, const vogl::dynamic_string& (vogl_shader_state::* func)(void) const, vogleditor_stateTreeItem* parent, const vogl_shader_state& state);
51     virtual ~vogleditor_stateTreeShaderLogItem() { m_pState = NULL; }
52
53     virtual bool hasChanged() const;
54     virtual QString getDiffedValue() const;
55
56 private:
57     const vogl::dynamic_string& (vogl_shader_state::* m_pFunc)(void) const;
58 };
59
60 class vogleditor_stateTreeShaderSourceLengthItem : public vogleditor_stateTreeShaderDiffableItem
61 {
62 public:
63     vogleditor_stateTreeShaderSourceLengthItem(QString name, vogleditor_stateTreeItem* parent, const vogl_shader_state& state);
64     virtual ~vogleditor_stateTreeShaderSourceLengthItem() { m_pState = NULL; }
65
66     virtual bool hasChanged() const;
67     virtual QString getDiffedValue() const;
68
69 private:
70 };
71
72 class vogleditor_stateTreeShaderStringItem : public vogleditor_stateTreeShaderDiffableItem
73 {
74 public:
75     vogleditor_stateTreeShaderStringItem(QString name, const vogl::dynamic_string& (vogl_shader_state::* func)(void) const, vogleditor_stateTreeItem* parent, const vogl_shader_state& state);
76     virtual ~vogleditor_stateTreeShaderStringItem() { m_pState = NULL; }
77
78     virtual bool hasChanged() const;
79     virtual QString getDiffedValue() const;
80
81  private:
82     dynamic_string m_value;
83     const vogl::dynamic_string& (vogl_shader_state::* m_pFunc)(void) const;
84 };
85
86 class vogleditor_stateTreeShaderItem : public vogleditor_stateTreeItem
87 {
88 public:
89    vogleditor_stateTreeShaderItem(QString name, QString value, vogleditor_stateTreeItem* parent, vogl_shader_state& state);
90    virtual ~vogleditor_stateTreeShaderItem() { m_pState = NULL; m_pDiffBaseState = NULL; }
91    virtual state_tree_type getStateType() const { return vogleditor_stateTreeItem::cSHADER; }
92
93    vogl_shader_state* get_current_state() const { return m_pState; }
94    const vogl_shader_state* get_base_state() const { return m_pDiffBaseState; }
95
96    void add_diffable_child(vogleditor_stateTreeShaderDiffableItem* pItem);
97
98    void set_diff_base_state(const vogl_shader_state* pBaseState)
99    {
100        m_pDiffBaseState = pBaseState;
101        for (vogleditor_stateTreeShaderDiffableItem** iter = m_diffableItems.begin(); iter != m_diffableItems.end(); iter++)
102        {
103            (*iter)->set_diff_base_state(pBaseState);
104        }
105    }
106
107 private:
108    vogl_shader_state* m_pState;
109    const vogl_shader_state* m_pDiffBaseState;
110    vogl::vector<vogleditor_stateTreeShaderDiffableItem*> m_diffableItems;
111 };
112 #endif // VOGLEDITOR_STATETREESHADERITEM_H